使用Python在CSV文件中搜索和替换文本

时间:2015-08-07 15:02:05

标签: csv python-3.x

我刚开始使用Python 3.4.2并尝试在csv文件中查找和替换文本。

在详细信息中,Input.csv文件包含以下行:

0,0,0,13,.\New_Path-1.1.12\Impl\Appli\Library\Module_RM\Code\src\Exception.cpp

0,0,0,98,.\Old_Path-1.1.12\Impl\Appli\Library\Prof_bus\Code\src\Wrapper.cpp

0,0,0,26,.\New_Path-1.1.12\Impl\Support\Custom\Vital\Code\src\Interface.cpp

0,0,0,114,.\Old_Path-1.1.12\Impl\Support\Custom\Cust\Code\src\Config.cpp

我维护了我的字符串,以便在名为list.csv

的其他文件中进行搜索
Module_RM
Prof_bus
Vital
Cust

现在我需要遍历Input.csv的每一行,并用匹配的字符串替换最后一列。

所以我的最终结果应该是这样的:

0,0,0,13,Module_RM  
0,0,0,98,Prof_bus  
0,0,0,26,Vital  
0,0,0,114,Cust  

我将输入文件的第一行读作列表。所以我需要替换的文字来自line[4]。我正在阅读list.csv文件中的每个模块名称,并检查line[4]中是否有任何匹配的文本。我无法提出if条件true。如果不是正确的搜索,请告诉我。

import csv
import re  

with open("D:\\My_Python\\New_Python_Test\\Input.csv") as source, open("D:\\My_Python\\New_Python_Test\\List.csv") as module_names, open("D:\\My_Python\\New_Python_Test\\Final_File.csv","w",newline="") as result:
reader=csv.reader(source)
module=csv.reader(module_names)
writer=csv.writer(result)
#lines=source.readlines()
for line in reader:
for mod in module_names:
    if any([mod in s for s in line]):
        line.replace(reader[4],mod)
        print ("YES")
    writer.writerow("OUT")
    print (mod)
module_names.seek(0)
lines=reader

请指导我完成此任务。

感谢您的支持!

1 个答案:

答案 0 :(得分:2)

最后我成功地解决了这个问题!

以下代码效果很好!

import csv

with open("D:\\My_Python\\New_Python_Test\\Input.csv") as source, open("D:\\My_Python\\New_Python_Test\\List.csv") as module_names, open("D:\\My_Python\\New_Python_Test\\Final_File.csv","w",newline="") as result:
    reader=csv.reader(source)
    module=csv.reader(module_names)
    writer=csv.writer(result)
    flag=False
    for row in reader:
        i=row[4]
        for s in module_names:
            k=s.strip()
            if i.find(k)!=-1 and flag==False:
                row[4]=k
                writer.writerow(row)
                flag=True
        module_names.seek(0)
        flag=False

感谢那些试图解决的人!如果您有更好的编码习惯,请分享!

祝你好运!