替换列表中的字符串,如果同时有 ,和 。

问题描述 投票:-1回答:1

我有一个csv文件(超过2K行,约400kb),格式如下。

1,2,,test;test_A;test_B,ok,test;test_A,any
2,332,,test,ko,ok,test_A,any
2,567,,test_A;hello;test,ko,ok,any

我有一个字典对象,它映射了应该被替换的字符串(键:OLD值;值:NEW值)。

dict_items([('test', 'NOT_test'), ('test_B', 'XYZ_test_B')])

如何解析整个文件并替换所有出现的字符串?

我用下面的代码运行了一个测试。

for line in fileinput.input('myfile', inplace=True, backup='.bk'):
    for key,values in Changed_GRP_name_dict.items():
        print(line.replace(key, values), end='') 

但输出创建了一个80Mb的csv文件... ... :-|

也许问题是与"; "的存在有关,但我不能删除它。

python string replace
1个回答
0
投票

你没有把所有的替换组合起来。你是分别对原始行进行了每一次替换,并显示了每一次替换的结果。

做所有的替换,更新 line 然后打印 line 最后一次。

for line in fileinput.input('myfile', inplace=True, backup='.bk'):
    for key,values in Changed_GRP_name_dict.items():
        line = line.replace(key, values)
    print(line)

0
投票

问题其实很简单:不是在你的行上执行所有的替换,然后打印最终结果,而是执行定义在 Changed_GRP_name_dict 在您从文件中读取的原始行上,每次都替换原始行中的值,然后打印结果。

这样,您就可以打印 N * M 行,如果您的输入文件有 N 行,而你的替换词典有 M 条目。它看起来像 M 有大约20个替换定义在里面--对吗?

© www.soinside.com 2019 - 2024. All rights reserved.