2016-11-06 101 views
2

我想清理我的代碼一點點,和我有麻煩搞清楚其中的這2種方法被認爲是最Python的一個什麼是打開一個文件最pythonic的方式?

import os 

dir = os.path.dirname(__file__) 
str1 = 'filename.txt' 
f = open(os.path.join(dir,str1),'r') 

雖然第二似乎是乾淨的一個了,我覺得聲明fullPath有點太多了,因爲它只會使用一次。

import os 

dir = os.path.dirname(__file__) 
str1 = 'filename.txt' 
fullPath = os.path.join(dir,str1) 
f = open(fullPath,'r') 

一般情況下,是一個更好的東西,以避免另一個呼叫內部通話功能,即使它增加了一行代碼?

+1

真的沒關係。兩者都不是「pythonic」。你應該按照你喜歡的方式去做。無論你做什麼,請遵循Januka的建議並使用'with'。這比你是否應該使用臨時變量的問題重要得多。就個人而言,在這樣一個簡單的例子中,我傾向於沒有臨時變量。 –

+0

好的,謝謝你的答案! – Faeralis

+0

另一種看待它的方法是「你覺得哪一個讓代碼更具可讀性?」在表達式更復雜的情況下,它肯定可以幫助使用臨時變量來澄清代碼。在這個特定的代碼中,它無關緊要,因爲它非常簡單。 –

回答

6
with open('file path', 'a') as f: 
    data = f.read() 
    #do something with data 

f = open(os.path.join(dir,str1),'r') 
f.close() 
+0

感謝您的答案,但那不是我正在尋找的。 我想知道是否應該調用'open()'調用內的'os.path.join()'或者在 – Faeralis

+1

之外定義一個變量你應該提到第二個選項需要你'f.close()'該文件在某個時刻或者保持文件指針處於打開狀態。 – Soviut

+0

@Soviut已注意。謝謝 –

1
file = open('newfile.txt', 'r') 

for line in file: 

     print line 

OR

lines = [line for line in open('filename')] 

如果文件很大,閱讀()是明確糟糕的主意,因爲它加載(無大小參數),全文件存入內存。

如果你的文件很大,這會造成延遲!所以,我不建議閱讀()或readlines()

+0

請正確格式化您的答案中的代碼。 – Soviut

+0

完成! 我是新來的社區,所以我不知道所有的格式和風格。 是否有任何指導方針? 在此先感謝 – anati

相關問題