我想替換文本檔案中的多個字串并使用 for 回圈生成它的多個文本檔案。
以下代碼是我到目前為止所做的,但是生成的行是從原始檔案中復制的(生成了兩行,一行用于替換 Column_A,另一行用于替換 Column_B),而不是替換我想要的字串。有什么建議可以改進我的代碼嗎?
for n in range(1,7):
input = open("C:\Users\...\file.txt", "rt")
output= open("file" str(n) "new.txt", "wt")
for line in input:
output.write(line.replace("Column_A", "Data_A" str(n) "_new"))
output.write(line.replace("Column_B", "Data_B" str(n) "_new"))
output.close()
uj5u.com熱心網友回復:
每次呼叫output.write它都會在檔案中寫出一行。您想要的是replace在第一次替換的結果上呼叫第二個,而不是在原始行上,這是您當前代碼所做的。
for line in input:
output.write(line.replace("Column_A", "Data_A" str(n) "_new").replace("Column_B", "Data_B" str(n) "_new"))
line.replace(...)回傳 astr并替換子字串,因此您可以鏈接呼叫,因為replace它是str
uj5u.com熱心網友回復:
該函式.write()將您傳遞給它的任何內容附加到檔案的末尾。
該line.replace()函式將修改line字串并按照您告訴它的方式替換內容,但是,您實際上并沒有修改檔案中的行,而是您在 for 回圈中在記憶體中創建的字串。
這個問題已經有了正確替換檔案中一行的解決方案。
uj5u.com熱心網友回復:
雙倍.replace()還好。不過,這里有一個正則運算式的替代方案:
import re
pattern = re.compile(r"Column_(A|B)")
for n in range(1, 7):
repl = f"Data_\g<1>{n}_new"
with open("C:\Users\...\file.txt", "rt") as fin,\
open(f"file{n}new.txt", "wt") as fout:
fout.writelines(pattern.sub(repl, line) for line in fin)
該re模塊是標準庫的一部分。pattern正在尋找Column_Aor ,并在一個組中捕獲Column_Bor A。B中使用的repl-string 使用.sub()捕獲組 ( \g<1>) 來確保使用正確的下標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467848.html
上一篇:rbinom的成功率高于預期
