回答
嘗試寫入您的文件lazily:不要寫,直到你終於確定你需要做到這一點。
是的,那是一種選擇,但我正在處理大量數據,我寧願將它的一小部分保留在內存中,直到它被刷新。 – aspade 2009-09-25 19:10:22
在這種情況下,小子集是您等待寫入的*一行*。 – 2009-09-25 20:22:46
會愛上!!!這是我想要做的方式,不幸的是我有一個來自subprocess.Popen調用的數據集合,因此我必須將其直接傳遞給文件。 – gunslingor 2018-01-09 18:33:18
如果保留行號的軌道,你可以使用這樣的事情:
from itertools import islice
def seek_to_line(f, n):
for ignored_line in islice(f, n - 1):
pass # skip n-1 lines
f = open('foo')
seek_to_line(f, 9000) # seek to line 9000
# print lines 9000 and later
for line in f:
print line
@ennuikiller:我也這麼想,但我不太確定這是否是最好的方法。我想有時候你必須做一些有用的事情,而不必擔心什麼是幻想。 – aspade 2009-09-25 19:13:43
也許是更好的事情是修改程序,使其只寫一行,如果你確定你想寫它。要做到這一點你的代碼看起來是這樣的:
to_write = ""
for item in alist:
#Check to make sure that I want to write
f.write(to_write)
to_write = ""
#Compute what you want to write.
to_write = something
#We're finished looping so write the last part out
f.write(to_write)
正如其他人指出,這並沒有太大的意義,它是遠最好不要寫,直到你不得不這樣做。在你的情況下,你可以將「寫指針」保留在處理的後面一行。
僞代碼:
previousItem = INVALID
for each item I:
is I same as previousItem?
then update previousItem with I
else
write previousItem to file
previousItem = I
write previousItem to file
,你可以看到,previousItem
是唯一的項目保存在內存中,並且它的更新會根據需要「收集」。它只是寫入文件,當下一個不是「一樣」那一個。
當然,您可以真正回滾文件光標,只記錄最後一行開始處的字節偏移量,然後在重寫之前執行fseek()
。起初編寫起來似乎更簡單,但調試卻是一場完全的噩夢。
如上所述,您最好不要試圖撤消寫入。如果你真的想這樣做,但是,它很容易做到:
import os
f = open("test.txt", "w+")
f.write("testing 1\n")
f.write("testing 2\n")
pos = f.tell()
f.write("testing 3\n")
f.seek(pos, os.SEEK_SET)
f.truncate(pos)
f.write("foo\n")
只是記錄文件位置後退到,尋求回它,並截斷該文件到該位置。
這樣做的主要問題是它不適用於流。你不能這樣做stdout,或者到管道或TCP流;只有一個真實的文件。
- 1. Vim撤銷:撤消文件寫入後的更改
- 2. Python - 「撤消」文本包裝
- 3. 撤消簽入?
- 4. python寫入文件
- 5. Python寫入文件
- 6. Python:寫入文件
- 7. 寫入python文件
- 8. Python寫入文件
- 9. python寫入文件不寫
- 10. Python - 寫入python文件?
- 11. 撤消或反向argsort(),python
- 12. C#:無法撤消插入的文本
- 13. HTML文本輸入撤消不工作
- 14. TF30073不能執行撤消有關覆寫文件合併WSDL
- 15. Python - 不寫入文件?
- 16. 不能寫入文件 - python
- 17. 在Python中寫入文件
- 18. 用Python寫入txt文件
- 19. Python並行寫入文件
- 20. Python Bluehost寫入文件
- 21. Python的CSV:寫入文件
- 22. 寫入文件使用python
- 23. 寫入文件在python
- 24. Python不會寫入文件
- 25. python文件寫入問題
- 26. 用python寫入文件
- 27. python寫入輸出文件
- 28. 不寫入文件在python
- 29. 寫入文件Python,錯誤?
- 30. Python:寫入Excel 2007+文件(.xlsx文件)
你爲什麼要這樣做?你能給一個背景環境嗎? – 2009-09-25 19:08:14
「嗨,我只是在腳下開槍自殺,治療這種疼痛最好的方法是什麼?」回答?不要將自己踢在腳下!除非您知道這是您想要做的事,否則不要將該行寫出到文件中。 – 2009-09-25 19:14:53
@Sridhar Ratnakumar:我有大量的數據解析來生成一個文件,每行都有相關信息。但是,如果給定的行包含與前一行相同的信息,則需要以不同的格式寫入。鑑於源數據非常龐大,我想逐行處理它。這有意義嗎? – aspade 2009-09-25 19:18:21