仅替换精确字符串

2024-10-01 17:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用另一个csv作为字典来替换csv文件中的精确字符串。 这是我的密码

import re
text = open("input.csv", "r", encoding="ISO-8859-1")
replacelist = open("replace.csv","r", encoding="ISO-8859-1").readlines()
for r in replacelist:
    r = r.split(",")
    text = ''.join([i for i in text]) \
    .replace(r[0],r[1])
print ({r[0]})
print ({r[1]})
x = open("new.csv","w")
x.writelines(text)
x.close()

是否可以使用replace方法仅替换完全匹配的字符串?我应该导入并使用re.sub()而不是replace吗

input.csv示例

ciao123;xxxxx;0
ciao12345;xxzzx;2

替换.csv示例

ciao123,ok
aaaa,no
bbb,cc

只能替换input.csv中的第一行


Tags: csv字符串textinre示例forinput
1条回答
网友
1楼 · 发布于 2024-10-01 17:35:43

好吧,根据你的评论,你的任务会简单得多,你也不需要玩正则表达式

基本上,如果csv列中的某个内容与单词完全匹配,则尝试替换该内容。如果是这样,则不应将其视为原始文本,而应将其视为列数据

如果您这样做,您可以使用如下示例:

text = open("input.csv", "r", encoding="ISO-8859-1").readlines()
replacelist = open("replace.csv","r", encoding="ISO-8859-1").readlines()

# make a replace word dictionary with O(n) time complexity
replace_data = {i.split(',')[0]: i.split(',')[1] for i in replacelist}

# Now treat data in input.csv as tabular data to replace the words
# Start another loop of O(n) time complexity
for idx, line in enumerate(text):
    line_lis = line.split(';')
    if line_lis[0] in replace_data:
       only replace word if it is meant to be replaced
       line_lis[0] = replace_data.get(line_lis[0])
       text[idx] = ';'.join(line_lis)

# write results
with open("new.csv","w") as f:
    f.writelines(text)

结果如下:

ok;xxxxx;0
ciao12345;xxzzx;2

相关问题 更多 >

    热门问题