1

我正在尝试替换 csv 文件中的多个字符串。这些字符串可能不在特定的列中。

我在这个线程中使用了示例Python replace multiple strings,即 wordpress 条目。我以为我有 CSV 模块,但我猜它没有替换功能。我尝试了以下方法,但它只替换了第一本字典。它必须首先完成第一个字典中的条目,第二个字典的顺序并不重要。

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

f_dic = {'-':' '}
s_dic = {'  ':' ','   ':' ','SASD D':'SASD-D','DC W':'DC-W',r'PROD\s\d':r'PROD\d'}

with open('file1.csv','r') as f:
    text=f.read()
    with open('file2.csv','w') as w:
        text=replace_all(text,f_dic)
        text=replace_all(text,s_dic)
        w.write(text)

有人可以帮我弄这个吗?甚至更好的 csv 模块版本?

谢谢, B0T

编辑

这是我回答后的最终代码。有效。

import re

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

f_dic = {'-':' '}
s_dic = {'  ':' ','   ':' ','SASD D':'SASD-D','DC W':'DC-W'}
t_dic = {'  ':' '}

with open('file1.csv','r') as f:
    text=f.read()
    text=replace_all(text,f_dic)
    text=replace_all(text,s_dic)
    text=replace_all(text,t_dic)
    text=re.sub(r'PROD\s(?=[1-9])',r'PROD',text)

with open('file2.csv','w') as w:
    w.write(text)
4

1 回答 1

1

嗯......这对我来说很好。

我正在运行 python 2.7.3

尝试以包含“123abc”的 file1.csv 开头的最小测试用例:

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

f_dic = {'a':'d'}
s_dic = {'1':'x'}

with open('file1.csv','r') as f:
    text=f.read()
    with open('file2.csv','w') as w:
        text=replace_all(text,f_dic)
        text=replace_all(text,s_dic)
        print text
        w.write(text)

运行后file2.csv包含x23dbc

也许我的测试用例太简单了。请告诉我们您在 file1.csv 中的内容、您希望在 file2.csv 中看到的内容以及您在 file2.csv 中实际看到的内容。

于 2013-07-08T21:30:28.910 回答