2012-04-19 15 views
1

私のプロジェクトには、ユーザの入力に基づいて呼び出される場合と呼び出されない場合があるcsvファイルがあります。これらのファイルをサブディレクトリに保存して、プロジェクトフォルダを整理した状態に保ちたいと思います。私はこれをどうやって行うのか全く分かりません。私が掘り下げたリソースのほとんどは、基本的なデータファイルではなくサブディレクトリからモジュールまたはパッケージをインポートすることを伴います。Pythonのサブディレクトリからcsvをインポートする

現在、私のcsvファイルをインポートのようなコードの行:私は輸入OSおよびインポートのsysを使用して、解決策はパス変数を設定する伴うだろうと仮定すると、おそらくこのライン複数を分割してい

target_doc = csv.reader(open('sample.csv', 'rU'), delimiter=",", quotechar='|') 

部品?

答えて

7

ファイルパスでファイルを開くことができます。ちょうどopen('/path/to/file')を使用してください。

インポートはモジュールとパッケージ(Pythonソースコードのみ)に必要です。

os.path.join()は、異なるオペレーティングシステムやファイルシステム間で良好な互換性を得るためにパスを結合する場所です。 os.pathモジュールの残りの部分は、ファイルが関係している場所でも一見価値があります。 Windowsパスのもう一つの一般的なトラップはバックスラッシュエスケープ文字を使用しているので、バックスラッシュ("some\\file")を避ける必要があります - 醜いオプション、生の文字列(r"some\file")を使用する、スラッシュを使用する(Pythonは実際にこれを自動的に処理します)上記のos.path.join()の引数としてパスを渡します。

the with statementを使用するとコードが改善されることにも注意してください。

例えば: - 例外が発生した場合でもwithを使用して

with open(os.path.join("path", "to", "file.csv"), 'rU') as file: 
    target_doc = csv.reader(file, delimiter=",", quotechar='|') 
    ... 

は、あなたのファイルが閉じますが保証されます。

+0

ああ、うんうん、単純だった。ステートメントの提案をありがとう、前にこの方法を使用して見たことがなかった。 – acpigeon

+0

with文を実装すると、ファイルを配列に書き込もうとすると入出力エラーが発生します。 \t target_docの行: \t target_list.extend(行) – acpigeon

+0

@acpigeon '' csv.reader() 'iteratesあなたがそれを使用するときにファイルの上にあるので、それを使用して '' with''ブロックの中にある文が必要です。そうでなければ、ファイルは閉じられます。 '' list(csv.reader(...)) ''を実行するだけで、そこでやろうとしていることを達成できることに注意してください(リストを作成したいイテレータについても同様です。マイナーな変更やフィルタリングを行ってリストを作成するには、[リストの補完](https://www.youtube.com/watch?v=t85uBptTDYY)を参照してください)。 –

0

あなたは

import os 
cwd = os.path.dirname(__file__) # get current location of script 

を使用し、お好きな場所への絶対パスを構築するために(CWD、「いくつかの/../パス」)os.path.join使用することができます。あなたのパスは、Pythonインタプリタの現在の作業ディレクトリに関係なく、あなたのスクリプトの場所に相対的です。 また、UNIXの '/'慣習に頼りたくない場合は、os.sepを使用してください。

+0

絶対パスではなく相対パスを使用するのは難しいでしょうか?私たちは、デフォルトのディレクトリはOKであるということを知っています。 –

+0

あなたが正しいかもしれませんが、私は正確に質問をしていないと思います。 –

1

あなたのパスは間違っています。 Pythonのパスとインポートは、あなたのシステムに他のPythonコードを "リンク"させるためのものです。

target_doc = csv.reader(open('/resources/csv_files/sample.csv', 'rU'), delimiter=",", quotechar='|') 

か、Pythonのファイルで実行している場所からの相対パス:

target_doc = csv.reader(open('csv_files/sample.csv', 'rU'), delimiter=",", quotechar='|') 
+2

面白い言葉遣いのためのUpvote – acpigeon

0

なぜドン」をお使いのシステムでリソースとして使用されるその他のファイルは、ファイルのフルパスを指定してアクセスされていますあなたは、単に使いT:

path_in = '/directory_whatever_it_is/sample_data.csv'

SAMPLE_DATA = pd.read_csv(path_in)

+0

_why_これは答えだと思いますか? _how_は動作しますか?文脈や意味がなくても、誰かに自分のコードを変更するよう指示するだけで、間違ったことを学ぶのに役立つわけではありません。 – GrumpyCrouton

関連する問題