2015-08-09 25 views
0

您好以下哪一段代碼需要或使用較少的資源? 有沒有更好的方法?寫入文件?哪種方法需要更少的資源?

f=open("Contact.txt","r+") 
    for i,j in enumerate(f): 
     text=str(f.readline()) 
     if text=="": 
      f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 

OR

f=open("Contact.txt","r+") 
text=str(f.read()) 
f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 
+0

我建議你爲字符串連接使用['str.format'](https://docs.python.org/2/library/stdtypes.html#str.format)。 –

+1

'j'會連續包含'f'的每一行。沒有必要在循環體中調用'f.readline()'。如果你這樣做,'text'只能得到其他所有行; 'j'有其他的。 – chepner

+0

您是否試圖將一些數據寫入文件中的空行? –

回答

2

第一種方法是有點不對勁,當你遍歷文件(即使使用枚舉),它已經讀取的行,你會得到它j,你不需要再次執行f.readline(),這會導致您的代碼跳過備用行(除非您確實要跳過備用行)。

此外,兩種方法都不會執行相同的操作,第一個方法是逐行讀取文件,第二個完全讀取文件並在最後寫入換行符。

鑑於這是固定的,第一種方法佔用的資源較少,因爲您不會將完整的文件讀入內存,而只需將每行讀入內存,然後寫入其他文件。

我可以建議的另一個改進是使用with語句來正確處理關閉文件。示例 -

with open("Contact.txt","r+") as f: 
    for i,text in enumerate(f): 
     if text=="": 
      f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 
2

我用這個:

f = open("Contact.txt","a") 
f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 
+1

也許你的意思是'open(「Contact.txt」,「a」)'? – Dunes

+0

是的,我的意思是,對不起 – svs

+0

你應該使用'with'語句關閉文件,你可以[用print()代替](http://stackoverflow.com/a/31905205​​/4279)。 – jfs

1

如果你只想要一個行添加到文件的末尾,最有效的是

with open("Contact.txt", "a") as f: 
    print("{} {} {} {} *".format(name, family, MPN, Add, file=f) 

打開文件在追加模式下自動啓動文件末尾的文件點,而不需要通過文件顯式讀取來啓動。 format方法創建一個單一的字符串,沒有通過鏈接添加創建的所有中間字符串。

+0

這只是寫入文件的簡單練習。我正在尋找最理想的方式 – RezaOptic

2

如果你的目的是要在文件的最後添加聯繫人:

with open("Contact.txt", "a") as file: 
    print(name, family, MPN, Add + "*", file=file) 

print()功能插入空格,並在該行的自動結束的換行符。