2017-08-14 7 views
1

私は、基本的にユーザーが引数として 'ファイルへのパス'をとるpythonスクリプトを作成しています。いくつかの後処理を行い、元のファイルと同じディレクトリに新しいファイルを作成します。私は、私が代わりにフォルダに移動し、私を作成するためにos.chdir()を使用するように言われてきた私は
C:\\A\\sub_A\\final_file.csvファイルとパスを操作するためのベストプラクティスは何ですか?

のためのファイルハンドラを作成するために自分自身を受信したパスを使用していmyscript.py C:\\A\\sub_A\\work_on_this_file.csv

:たとえば

パスを直接使用するのではなく、最終的なファイルを作成します。このようなシナリオではベストプラクティスは何ですか?作業ディレクトリを変更しないというリスクはありますか?

答えて

1

常には絶対パスを使用することをお勧めしますが、実際には最も簡単な方法です。したがって、ファイルを直接作成する(または既存のファイルを開くことは問題ではありません)絶対パスを使用すると問題ありません。

import os 

cwd = os.path.abspath(os.path.dirname(__file__)) 
given_path = "../../myfile.csv" 
csv_path = os.path.abspath(os.path.join(cwd, given_path)) 

の代わりに__file__使用:あなたは私がベースフォルダとしてスクリプトのディレクトリを取って、その後、絶対パスを生成するので、同じよう示唆woul絶対パスまたは相対パスを持っているかどうかわからない

sys.argv[0]モジュール/インポートされたスクリプトを扱う場合。 CWDを変更するIMOは通常必要ではなく、間もなく他のものを破る可能性が最も高いです。

+0

可能であれば、すべてのパスをログに記録することをお勧めします。サードパーティ製の製品でレガシーな問題を回避する以外は、os.chdir()を使用することを推奨する理由がわかりません。 – Arafangion

0

私が5セント:その場合はファイルに、ファイルを開く時に

  • 使用CSV File Reading and Writing CSVファイルで動作するように
  • 使用 with 文は常に は、予期しないエラーが発生した場合に閉鎖されるだろう。
  • クロスプラットフォームパスを使用するには、常にos.sep を使用してください。
  • os.path.join を使用すると、ファイルパスが正しく形成されます。
  • os.linesep を使用すると、ファイルを1行ずつ正しく処理することができます。
関連する問題