是否可以逐行解析文件,並在遍歷行的同時編輯一行?是否可以修改文件中的行?
回答
是否有可能逐行解析文件,並在通過這些行時在位編輯一行?
它可以使用stdlib的fileinput
module的備份文件進行模擬。
下面是一個例子腳本,其去除不從命令行或stdin
上給定文件滿足some_condition
行:
#!/usr/bin/env python
# grep_some_condition.py
import fileinput
for line in fileinput.input(inplace=True, backup='.bak'):
if some_condition(line):
print line, # this goes to the current file
實施例:
$ python grep_some_condition.py first_file.txt second_file.txt
完成後first_file.txt
和second_file.txt
文件將包含只有滿足some_condition()
謂詞的行。
實際上並沒有寫入文件中間的方法也是明智的,因爲它很容易使修改成爲原子性的(也就是說,如果程序被中斷,文件不會以部分修改的狀態結束)。 – L33tminion 2015-06-17 18:22:03
您必須按照字符的大小來備份。假設你使用readline
,那麼你就可以得到該行的長度和備份使用:
file.seek(offset[, whence])
設置何處來SEEK_CUR
,將偏置置-length
。
請參閱Python Docs或查看seek
的聯機幫助頁。
不可以。您無法安全地寫入您正在閱讀的文件,因爲您對該文件所做的任何更改都可能會覆蓋您尚未閱讀的內容。要做到這一點,你必須將文件讀入緩衝區,根據需要更新任何行,然後重新寫入文件。
如果要替換文件中的內容(即,如果要替換的文本長度與您替換的新字符串的長度相同),則可以避開它,但它是一個大黃蜂巢,所以我會省下麻煩,只讀完整文件,替換內存中的內容(或通過臨時文件),然後再寫出來。
模式'rb +'允許讀取,移動和寫入文件 – eyquem 2011-03-28 00:10:54
@eyquem - 好點,我會更新我的答案。 – 2011-03-28 00:15:25
- 1. 是否可以在運行時修改可執行文件?
- 2. 是否可以修改可執行文件中的.frm文件的設置?
- 3. 是否可以修改len()的行爲?
- 4. 是否可以修改PrintDialog?
- 5. 是否可以在render()中修改this.state?
- 6. 替換.plist文件中的行以修改<string> - 是否有可能?
- 7. 是否可以重置Android文件的上次修改日期?
- 8. 是否可以使用Ruby讀取文件的修改日期?
- 9. 是否可以使用.autocomplete()的修改?
- 10. 是否可以修改VIM中的ctrl-o行爲?
- 11. 是否可以自修改文件級代碼?
- 12. 是否可以編輯/修改.so文件?
- 13. 是否可以在運行時修改並保存程序中的XML文件而不是外部文件?
- 14. 是否可以修改uitabbarcontroller高度?
- 15. 是否可以直接修改HTML流?
- 16. 是否可以修改$ _SESSION變量?
- 17. 是否可以修改let綁定?
- 18. 是否可以修改列表元素?
- 19. 是否可以防止DLL被修改?
- 20. 是否可以修改子進程?
- 21. 是否可以修改遷移
- 22. 是否可以修改HTML圖表?
- 23. 是否可以在運行中修改選擇?
- 24. 是否可以更改xib文件?
- 25. 是否可以修改SSMS中的「更改過程」模板?
- 26. 是否可以在不更改散列值的情況下修改文件
- 27. NuGet軟件包安裝過程中是否可以修改VS項目文件?
- 28. 是否可以修改GDB中沒有符號表的可執行文件中的變量?
- 29. 是否可以在運行時修改屬性的屬性?
- 30. 是否可以修改MQ FTE從源路徑中選擇文件的順序?
有可能在某些條件下。如果編輯處理過的生產線所產生的生產線較短或與生產生產線長度相同,則很容易做到。如果不是這種情況,則變得更加困難,但如果進行編輯的線條不是太多的話,則不是不可能的。你問這個是因爲你想處理一個大文件嗎? – eyquem 2011-03-27 23:58:01
>>> f = open('tmp','r +') >>> f.readline() '75 .14 \ n' >>> f。readline() '100 \ n' >>> l = _ >>> f.seek(-l.len(),file.SEEK_CUR) >>> f.seek(-len(l),os .SEEK_CUR) >>> f.write('999 \ n') >>> f.close() >>> – Bob 2011-03-28 00:02:36
請參閱此處的示例(http://stackoverflow.com/questions/5286020/python-string - 替換文件 - 不觸及文件 - 如果不替換 - ) – eyquem 2011-03-28 00:06:10