2016-08-11 3 views
0

これは非常に簡単な質問です(皮肉な原因は私には答えられません:/)。私は自分自身と私の同僚が使用するように設計されたプログラムを持っており、すべてのデータはディレクトリに保存されています。しかし、ループをセットアップして、私と彼の両方のために働きたい。私はこれらのすべてを試しました:開始ループを正しくフォーマットするにはどうすればいいですか?

file_location = glob.glob('/../*.nc') 
file_location = glob('/../*.nc') 

しかし、それらのどれもファイルを拾っていません。これをどうすれば解決できますか?乾杯!

+0

'相対パス'( '../'など)を使用している場合は、各ユーザーのマシン上で同じ相対位置からスクリプトを実行していることを確認する必要があります。 – nbryans

+0

'epsuser'はあなたのユーザ名ですか? 'glob.glob(os.path.expanduser( '〜/ Dropbox/Argo/Data/*。nc'))'のようなことはどうでしょうか? – Anonymous

+0

相対パスを使用している場合は、プログラムを実行するときの現在の作業ディレクトリの種類によって異なります。絶対パスは正常に動作しているので、現在のディレクトリは "/ Users/epsuser"の下にない可能性があります。また、あなたが試した最初の2つの選択肢は動作しません。最初の "/"はルートディレクトリを意味し、それ以上は何もないので、どちらも "/ Dropbox/Argo/Data/*.nc"存在しない。 –

答えて

4

os.path.expanduser()を使用して、ユーザーの自宅(関数呼び出しで~と呼ばれます)に関連するディレクトリを取得できます。シェルスクリプトのパスを書いて、サブプロセス:あなたのケースでは、ラインはあなたが整形式のパス(すなわちを必要とする他のタスクのためにあなたのパスを使用するつもりだ場合は通常は良い練習がパスをハードコーディングされていない

file_location = glob.glob(os.path.expanduser('~/Dropbox/Argo/Data/*.nc')) 
+0

ありがとうございました! – jstack

2

だろう)、Iは、例えば、代わりにはos.pathモ​​ジュールを使用してパスを管理することをお勧めしたい:

import os, glob 

home_path = os.path.expanduser("~") 
dropbox_path = os.path.join(home_path, "Dropbox") 
good_paths = glob.glob(os.path.join(dropbox_path,"Argo","Data","*.nc")) 
bad_paths = glob.glob(dropbox_path+"/Argo\\Data/*.nc") 

print len(good_paths)==len(bad_paths) 
print all([os.path.exists(p) for p in good_paths]) 
print all([os.path.exists(p) for p in bad_paths]) 

例が悪いと整形パス間の比較を示します。両方とも動作しますが、good_pathsはより柔軟になります。&長期的には移植性があります。

+0

醜いですが確かに携帯性があります – Anonymous

+0

@jphollowed私のウィンドウズボックスでは、受け入れられた答えがクラッシュするので、間違いなく私の "醜い"方法を好むでしょう;) – BPL

+1

@BPL実行中のWindowsのバージョンは、 'パス区切り記号として? – RoadieRich

関連する問題