這是一個非常簡單的問題(諷刺的原因我不能回答:/)。我有一個我自己和我的同事設計的程序,所有的數據都存儲在一個目錄中。但是,我想設置循環,以便它對我和他都有效。我試過所有這些:如何正確地格式化開始一個循環?
file_location = glob.glob('/../*.nc')
file_location = glob('/../*.nc')
但他們都沒有拿起任何文件。我怎樣才能解決這個問題?乾杯!
這是一個非常簡單的問題(諷刺的原因我不能回答:/)。我有一個我自己和我的同事設計的程序,所有的數據都存儲在一個目錄中。但是,我想設置循環,以便它對我和他都有效。我試過所有這些:如何正確地格式化開始一個循環?
file_location = glob.glob('/../*.nc')
file_location = glob('/../*.nc')
但他們都沒有拿起任何文件。我怎樣才能解決這個問題?乾杯!
您可以使用os.path.expanduser()
獲取相對於用戶家中的目錄(在函數調用中稱爲~
)。在你的情況下,該行會
file_location = glob.glob(os.path.expanduser('~/Dropbox/Argo/Data/*.nc'))
謝謝,這工作! – jstack
通常不是硬編碼的路徑,如果你會用你的路徑,這就需要形成良好的路徑(即其他任務一個很好的做法:子,寫作路徑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將會更加靈活,可以長期使用。
醜陋的,但肯定更便攜 – Anonymous
@jphollowed好吧,接受的答案會崩潰在我的窗口框,所以我絕對更喜歡我的「醜陋」的方式;) – BPL
@BPL你運行的Windows版本不支持'/ '作爲路徑分隔符? – RoadieRich
如果您使用的是'相對路徑'(如'../'),您需要確保您在每個用戶的機器上以相同'相對'位置運行腳本。 – nbryans
'epsuser'是你的用戶名嗎?怎麼做'glob.glob(os.path.expanduser('〜/ Dropbox/Argo/Data/*。nc'))''? – Anonymous
如果您使用相對路徑,它將取決於您運行程序時當前的工作目錄。由於絕對路徑工作正常,很可能您的當前目錄不在「/ Users/epsuser」下面。此外,您嘗試的前兩個選項不起作用,最初的「/」表示根目錄,並且上面沒有任何內容,所以它們都在嘗試「/Dropbox/Argo/Data/*.nc」,它不會不存在。 –