[英]Using CSV columns to Search and Replace in a text file
背景
我有一個像這樣的兩列 CSV 文件:
尋找 | 代替 |
---|---|
是 | 曾是 |
一種 | 一 |
乙 | 二 |
等等。
第一列是要查找的文本,第二列是要替換的文本。
我有第二個文件,里面有一些這樣的文字:
“這是文本文件中的一段。” (請注意區分大小寫)
我的要求:
我想使用該csv 文件在具有三個條件的文本文件中搜索和替換:-
腳本嘗試:
with open(CSV_file.csv', mode='r') as infile:
reader = csv.reader(infile)
mydict = {(r'\b' + rows[0] + r'\b'): (r'\b' + rows[1]+r'\b') for rows in reader}<--Requires Attention
print(mydict)
with open('find.txt') as infile, open(r'resul_out.txt', 'w') as outfile:
for line in infile:
for src, target in mydict.items():
line = re.sub(src, target, line) <--Requires Attention
# line = line.replace(src, target)
outfile.write(line)
腳本說明我已將 csv 加載到 python 字典中,並使用正則表達式查找整個單詞。
問題
我使用 r'\\b' 來制作單詞邊界以進行整個單詞替換,但輸出在字典中給了我 "\\\\b" 而不是 '\\b' ??
使用 REPLACE 函數給出如下:
“這是文本文件中的一個段落。”
其次,我不知道如何在正則表達式模式中使替換區分大小寫?
如果有人知道比這個腳本更好的解決方案或者可以改進腳本?
有的話謝謝幫忙。。
我只是將純字符串放入mydict
所以它看起來像
{'is': 'was', 'A': 'one', ...}
並替換此行:
# line = re.sub(src, target, line) # old
line = re.sub(r'\b' + src + r'\b', target, line) # new
請注意,替換模式中不需要\\b
。 關於你的其他問題,
'\\b'
更改為 '\\\\b' 正是r''
所做的。 您可以省略r
並編寫'\\\\b'
,但是使用更復雜的正則表達式會很快變得丑陋。這是一種更麻煩的方法(更多代碼),但更易於閱讀並且不依賴於正則表達式。 事實上,鑒於您的 CSV 控制文件非常簡單,我通常根本不會費心使用 csv 模塊:-
import csv
with open('temp.csv', newline='') as c:
reader = csv.DictReader(c, delimiter=' ')
D = {}
for row in reader:
D[row['Find']] = row['Replace']
with open('input.txt', newline='') as infile:
with open('output.txt', 'w') as outfile:
for line in infile:
tokens = line.split()
for i, t in enumerate(tokens):
if t in D:
tokens[i] = D[t]
outfile.write(' '.join(tokens)+'\n')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.