是否可以逐行解析文件,並在遍歷行的同時編輯一行?是否可以修改文件中的行?
回答
是否有可能逐行解析文件,並在通過這些行時在位編輯一行?
它可以使用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. 是否可以修改PrintDialog?
- 2. 是否可以重置Android文件的上次修改日期?
- 3. 是否可以編輯/修改.so文件?
- 4. 是否可以在運行時修改並保存程序中的XML文件而不是外部文件?
- 5. 是否可以修改遷移
- 6. 是否可以修改子進程?
- 7. 是否可以直接修改HTML流?
- 8. 是否可以修改$ _SESSION變量?
- 9. 是否可以在不更改散列值的情況下修改文件
- 10. 是否可以修改GDB中沒有符號表的可執行文件中的變量?
- 11. 是否可以在運行時修改屬性的屬性?
- 12. 是否可以檢查源代碼生成中是否修改了文件/文件夾
- 13. 是否有可能在Stata中獲得文件修改時間?
- 14. 手動觸發KVO事件時,修改字典是否可以修改?
- 15. 是否有條件聲明可以修復我的頭文件?
- 16. 是否可以通過命令行修改eclipse工作區?
- 17. Netsuite Suitescript可以修改文件櫃中的文件嗎?
- 18. C程序可以修改其可執行文件嗎?
- 19. 檢查文件是否已被修改
- 20. 是否可以在安裝後編輯/修改Firefox插件?
- 21. 是否可以修改Twig中佔位符前的單詞?
- 22. 是否可以通過ReportDocument類修改報表中的格式?
- 23. @classmethod是否可以修改它在GAE中創建的記錄?
- 24. 是否可以修改mailto鏈接中的「from」字段?
- 25. 是否可以修復由ASCII轉換損壞的PNG文件?
- 26. 是否可以修改.apk的安裝,以便它創建一個文件夾或一些不同的文件?
- 27. 我們是否可以在創建存根時修改ConverterUtil.java文件
- 28. 是否可以修改文本swt控件如何包裝單詞?
- 29. 是否可以在運行中更改工具提示文本?
- 30. Mongoose - 是否可以修改鍵值以匹配find()查詢的條件?
有可能在某些條件下。如果編輯處理過的生產線所產生的生產線較短或與生產生產線長度相同,則很容易做到。如果不是這種情況,則變得更加困難,但如果進行編輯的線條不是太多的話,則不是不可能的。你問這個是因爲你想處理一個大文件嗎? – 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