2016-12-01 16 views
0

, поэтому я хочу использовать модуль csv для чтения в некоторых файлах csv.files, но я получаю следующие ошибки с данным кодом:Чтение модулей CSV в файлах, которые находятся в какой-либо другой папке (например, папке «Мои загрузки»)

########################### IMPORT MODULES ############################ 

import sys, time, glob, os, csv, student 

######################### DEFINE PARAMETERS ########################### 

timings_csv_file  = './timings.csv' 
inputs_csv_file  = './inputs.csv' 
testing_pair_csv_file = './testing_pair.csv' 

############## LOAD TIMINGS INFORMATION AND TEST PAIR ################# 

csv_reader = csv.reader(open(timings_csv_file, 'rb'), delimiter=',') 
timings = [int(element) for element in csv_reader.next()] 

csv_reader = csv.reader(open(testing_pair_csv_file, 'rb'), delimiter=',') 
testing_pair = [long(element) for element in csv_reader.next()] 

csv_reader = csv.reader(open(inputs_csv_file, 'rb'), delimiter=',') 
inputs = [long(element) for element in csv_reader.next()] 

##################### PERFORM TIMING ATTACK ########################### 

key = student.perform_timing_attack(inputs, timings, testing_pair) 

######################## OUTPUT RESULTS ############################### 

keyhex = ",".join(["%02X" % (key >> 64-(8*(i+1)) & 0x00000000000000FF) for i in range(64/8) ]) 
print keyhex 

################### WRITE RESULTS TO A FILE ########################### 

keyF = open("./key.txt", "w") 
keyF.write(keyhex) 
keyF.close() 

Я получаю наступающее сообщение об ошибке:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 
    File "/Users/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile 
    builtins.execfile(filename, *where) 
    File "/Users/Amine/Downloads/SIKA_Aufgabe_2/ga24feb_timings/framework/main.py", line 13, in <module> 
    csv_reader = csv.reader(open(timings_csv_file, 'rb'), delimiter=',') 
IOError: [Errno 2] No such file or directory: './timings.csv' 

Я думаю, Python не может найти файлы в текущем каталоге, где он на самом деле ищет или работающие, так как я сказал:»./file.csv ». Насколько я знаю, он ищет в своем текущем каталоге. Я знаю, что если я введу весь путь к csv-файлам, он будет работать, но я хочу сделать его независимым от пути к файлу, поэтому код должен иметь возможность работать всегда с данными по своему пути ,

Итак, как мне изменить путь к Python, чтобы оставить csv-файлы там, где они есть, и по-прежнему использовать «./file.csv». Например. когда я проверяю, какой путь на самом деле ищет Python, используя «sys.path [0]« Я получаю вывод «'», который я действительно не понимаю, потому что черт есть «путь»? Более того, я пытался установить PYTHONPATH, но я думаю, что PYTHONPATH включает только импорт данных для модулей (это правильно?).

Итак, что мне нужно сделать, чтобы установить путь, который Python ищет, так что «./file.csv» работает для меня.

Спасибо!

+0

Вы пытаетесь активировать один каталог, из которого выполняется скрипт? В этом случае вы можете «импортировать os», затем «directory = os.path.dirname (__ file __)», затем «file_to_read = os.path.join (каталог,« ../ timings.csv »)». Я не уверен в более общем решении, которое не зависит от местоположения сценария. – roganjosh

+0

ищет в '/ Пользователи/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site /', и именно поэтому вы получаете эту ошибку. – Prajwal

+0

Да, откуда вы это знаете. Я изменил текущий рабочий каталог python со следующим «os.chdir («/Users/Amine/Downloads/SIKA_Aufgabe_2/ga24feb_timings »), с помощью которого я смог активировать один каталог. Но я все еще получаю сообщение об ошибке. – SolingerMUC

ответ

0

Если вы знаете, что файлы, которые вы обрабатываете, всегда находятся на том же пути, что и ваш скрипт, как указано в вашем заявлении, «поэтому код должен иметь возможность работать всегда с данными по своему собственному пути». просто вызовите файл с его именем (без косой черты):

timings_csv_file  = 'timings.csv' 
inputs_csv_file  = 'inputs.csv' 
testing_pair_csv_file = 'testing_pair.csv' 

это будет работать, когда вы каталог выглядит следующим образом:

dir/ 
....script.py 
....timings.csv 
....inputs.csv 
....testing_pair.csv 

с другой стороны, если вы хотите, чтобы подняться на один уровень иерархии (я не совсем уверен, что это было то, что вы собирались?), вы могли бы сделать это:

timings_csv_file  = '../timings.csv' 
inputs_csv_file  = '../inputs.csv' 
testing_pair_csv_file = '../testing_pair.csv' 

это будет работать, когда ваша структура папок выглядит следующим образом:

dir/ 
....timings.csv 
....inputs.csv 
....testing_pair.csv 
....python/ 
    ....script.py 
+0

Привет, христианин! Прежде всего, спасибо за решения! Это правда, что csv. файлы - это один уровень иерархии выше моего текущего рабочего каталога (cwd). И если я использую ваш метод с 'timings_csv_file = '../timings.csv' Входы_csv_file = '../inputs.csv' testing_pair_csv_file = '../testing_pair.csv'' работает как шарм :). Но что же тогда использовать «./File.csv», если я могу использовать '../ file.csv' в том случае, если мои файлы имеют один уровень выше, и' file.csv ', если они находятся в текущем рабочий каталог. Мне уже помогли! Спасибо – SolingerMUC

0

Вместо,

timings_csv_file  = './timings.csv' 
inputs_csv_file  = './inputs.csv' 
testing_pair_csv_file = './testing_pair.csv' 

использование

import os 
current_path = os.getcwd() 
timings_csv_file  = current_path + '\\timings.csv' 
inputs_csv_file  = current_path + '\\inputs.csv' 
testing_pair_csv_file = current_path + '\\testing_pair.csv' 

Это, получает ток рабочий каталог вашего скрипта d передает полный путь к библиотеке.

+0

Привет, Праджваль! Спасибо, это сработало хорошо. Но дело в том, что мне не разрешено изменять код, который я цитировал выше. Это как-то файл ** main.py **. Можете ли вы объяснить мне разницу между использованием чего-то типа: 'timings_csv_file = './Timings.csv'' по сравнению с' timings_csv_file =' timings.csv'', так что в принципе без косой черты? Я всегда думал, что при наборе './Files.type' я бы сказал, чтобы посмотреть в текущем каталоге, в котором он находится? – SolingerMUC

+0

Если вы даете '' timings.csv'' как путь, он работает? – Prajwal

+0

@ Prajwal: Да, используя только 'timings.csv' работает так же, как с'./'Перед ним. Так что, я думаю, это не имеет никакого эффекта? Что ты говоришь? – SolingerMUC