我刚开始使用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
请指导我完成此任务。
感谢您的支持!
答案 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
感谢那些试图解决的人!如果您有更好的编码习惯,请分享!
祝你好运!