我有一个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文件... ... :-|
也许问题是与"; "的存在有关,但我不能删除它。
你没有把所有的替换组合起来。你是分别对原始行进行了每一次替换,并显示了每一次替换的结果。
做所有的替换,更新 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)
问题其实很简单:不是在你的行上执行所有的替换,然后打印最终结果,而是执行定义在 Changed_GRP_name_dict
在您从文件中读取的原始行上,每次都替换原始行中的值,然后打印结果。
这样,您就可以打印 N * M
行,如果您的输入文件有 N
行,而你的替换词典有 M
条目。它看起来像 M
有大约20个替换定义在里面--对吗?