2016-12-01 4 views
0

csv.filesを読み込むためにcsvモジュールを使用したいのですが、指定されたコードで次のエラーが表示されます:ファイル内の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-filesの全パスを入力すればうまくいくが、ファイルパスから独立させたいので、コードはそれ自身のパスのデータで常に動作する必要がある。

どのようにしてcsv-filesをそのまま残して、 "./file.csv"を使用できるようにするには、Pythonのパスを変更する必要がありますか?例えば。 Pythonが "sys.path [0]"を使って実際に探しているパスを調べると、出力が得られる "私は本当に理解できません。"さらに、私は自分のPYTHONPATHを設定しようとしましたが、PYTHONPATHはモジュールのデータのインポートのみを必要とします(これは正しいのですか?)。

だから、 "./file.csv"が私のために働くようにPythonが探しているパスを設定するにはどうすればよいですか?

ありがとうございます!

+0

スクリプトが実行されている場所から1つのディレクトリをステップアップしようとしていますか?その場合は 'import os'を実行し、次に' directory = os.path.dirname(__ file __) ''そして 'file_to_read = os.path.join(ディレクトリ、 '../ timings.csv')'を実行します。スクリプトの場所に依存しない、より一般的なソリューションについてはわかりません。 – roganjosh

+0

'/ Users/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site /'で検索しているので、そのエラーが出ています。 – Prajwal

+0

はい、あなたはそれをどのように知っていますか?私は以下の "os.chdir( '/ Users/Amine/Downloads/SIKA_Aufgabe_2/ga24feb_timings')を使って私の現在のpythonの作業ディレクトリを変更し、1つのディレクトリをステップアップすることができました。しかし、私はまだエラーメッセージが表示されます。 – SolingerMUC

答えて

0

処理しているファイルが、「コードは常にその独自のパスのデータで動作する必要があります」というステートメントで示されているとおり、スクリプトと同じパスにあることがわかっている場合は、あなたは1つの階層レベルを上に移動したい場合は一方

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)より1階層上にあります。そして、あなたのメソッドを 'timings_csv_file = '../timings.csv'と使用すると、 inputs_csv_file = '../inputs.csv' testing_pair_csv_file = '../testing_pair.csv''itは魅力的に機能します:)しかし、私のファイルが上記の一つのディレクトリレベルで、 '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' 

この電流を取得します。あなたのフォルダ構造は次のようになりますとき

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

これは動作しますあなたのスクリプトの作業ディレクトリdは完全なパスをライブラリに渡します。

+0

ちょっとPrajwal!ありがとう、これはうまくいった。しかし、問題は、私は上に引用したコードを変更することは許されていないということです。何とか** main.py **ファイルです。 'timings_csv_file = '。/ timings.csv''を' timings_csv_file =' timings.csv''と比較して、基本的にドットスラッシュを使わないという違いを私に説明できますか?私はいつも '。/ files.type'とタイプすると、現在のディレクトリを調べると言っていると思っていましたか? – SolingerMUC

+0

'' timings.csv''をパスとして指定すると動作しますか? – Prajwal

+0

@ Prajwal: 'timings.csv'だけを使用すると、その前に'。/ 'と同じ働きをします。だから私はそれは効果がないと思いますか?あなたは何を言っていますか? – SolingerMUC

関連する問題