簡體   English   中英

使用 CSV 列在文本文件中搜索和替換

[英]Using CSV columns to Search and Replace in a text file

背景

我有一個像這樣的兩列 CSV 文件:

尋找 代替
曾是
一種

等等。

第一列是要查找的文本,第二列是要替換的文本。

我有第二個文件,里面有一些這樣的文字:

“這是文本文件中的一段。” (請注意區分大小寫)

我的要求:

我想使用該csv 文件在具有三個條件的文本文件中搜索和替換:-

  1. 全字替換。
  2. 區分大小寫的替換。
  3. 替換 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM