2017-04-26 61 views
0

與發佈類似:Replace string in a specific line using python,但是結果並不是在我略有不同的實例中預先設定的。替換非標準文本文件的特定行中的字符串

我在Windows 7上使用python 3.我試圖批量編輯目錄中的某些文件。它們基本上是帶有.LIC標籤的文本文件。我不確定這是否與我的問題有關。我能夠將文件讀入python而沒有問題。 我的目標是替換此文件中特定行上的特定字符串。

import os 
import re 

groupname = 'Oldtext' 
aliasname = 'Newtext' 

with open('filename') as f: 
    data = f.readlines() 
    data[1] = re.sub(groupname,aliasname, data[1]) 
    f.writelines(data[1]) 

print(data[1]) 
print('done') 

當運行上面的代碼時,我得到一個UnsupportedOperation: not writable。我有一些問題將更改寫回文件。根據其他職位的建議,我編輯添加w選項open('filename', "w")函數。這會導致文件中的所有文本被刪除。

根據建議,嘗試了r+選項。這導致文件的成功編輯,但是,不是編輯正確的行,而是將編輯過的行附加到文件的末尾,使原始文件保持不變。

+0

嘗試使用'r +'模式,該模式打開文件以讀取和寫入 – Wondercricket

+0

我試過了您的建議。這使我可以編輯文件,但修改後的行只是附加到文件而不是編輯所需的行。 – DavidU

回答

0

將改變的行寫入文本文件的中間是行不通的,除非它與原始文件的長度完全相同 - 在您的示例中就是這種情況,但是您在該處有一些明顯的佔位符文本,所以我不知道您的實際應用程序代碼是否也是如此。這裏有一個辦法,不作任何這樣的假設:

with open('filename', 'r') as f: 
    data = f.readlines() 
data[1] = re.sub(groupname,aliasname, data[1]) 
with open('filename', 'w') as f: 
    f.writelines(data) 

編輯:如果你真的想只寫一行迴文件,你需要使用f.tell()閱讀前行,要記住它在文件中的位置,然後f.seek()在寫入之前回到那個位置。

+0

太棒了,謝謝。 – DavidU

相關問題