2016-08-11 20 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」下面。此外,您嘗試的前兩個選項不起作用,最初的「/」表示根目錄,並且上面沒有任何內容,所以它們都在嘗試「/Dropbox/Argo/Data/*.nc」,它不會不存在。 –

回答

4

您可以使用os.path.expanduser()獲取相對於用戶家中的目錄(在函數調用中稱爲~)。在你的情況下,該行會

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

謝謝,這工作! – jstack

2

通常不是硬編碼的路徑,如果你會用你的路徑,這就需要形成良好的路徑(即其他任務一個很好的做法:子,寫作路徑shell腳本),我建議使用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