2015-02-10 159 views
0

我想知道在以下情況下使用路徑的最佳做法: 我可以選擇將當前目錄更改爲所需的文件夾,然後僅使用文件名生成文件,或者僅使用直接完整路徑。更改目錄比。完整路徑

這裏是我設定的當前目錄os.chdir()代碼:

a=time.clock() 
import os 
for year in range(start,end): 
    os.chdir("C:/CO2/%s" % year) 
    with open("Table.csv",'r') as file: 
     content=file.read() 
b=time.clock() 
b-a 
Out[55]: 0.002037443263361638 

這是直接使用的完整路徑時慢:

a=time.clock() 
for year in range(start,end): 
    with open("C:/CO2/%s/Table.csv" % year,'r') as file: 
     content=file.read() 
b=time.clock() 
b-a 

Out[56]: 0.0014569102613677387 

我仍然懷疑,雖然是否使用全路徑是很好的做法。兩種方法都是跨平臺的嗎?我應該使用os.path而不是%s嗎?

+0

我懷疑在代碼中放入絕對部分'C:/ CO2 /'是個好主意。其餘的並不重要。 – 2015-02-10 11:05:11

+1

我會用os.path.join – 2015-02-10 11:06:40

+0

@LutzHorn,有時我會得到一個不一致的斜線分隔符的路徑,比如C:/ CD2 \\ 2001 請問只需chdir到C:/ CD2,然後在文件? – multigoodverse 2015-02-11 09:31:03

回答

1

正如@ lutz-horn所說,硬編碼路徑對於任何代碼來說都不是好主意,除了單運行腳本。

談到設計,選擇看起來更加明確和簡單的方法來進一步開發,在運行時間成爲問題之前不要優化您的代碼。

在特殊情況下,我寧願選擇第二種方式。在編寫一致文件之前不需要chdir。如果您使用不同的名稱模式編寫多個文件,則應該使用明確的chdir

2

有問題的代碼的用例是什麼?它是由用戶在命令行上調用的腳本嗎?如果是這樣,我通常會將該路徑作爲命令行參數(sys.argv),作爲命令行選項(​​)或使用某種配置文件。

或者是更通用模塊的文件路徑部分?在這種情況下,我可能會考慮將路徑和相關代碼包裝在一個類中(class FooBar)。實例化FooBar時,模塊的用戶可以傳入所需的文件路徑信息。如果用戶反覆使用相同的路徑,我會再次傾向基於配置文件的策略。

無論哪種方式,文件路徑將與代碼分開 - 至少對於真正的軟件項目。

如果我們談論的是一次性腳本,用戶很少,未來進化或代碼重用的可能性幾乎爲零,那麼您的操作並不重要。

相關問題