我试图通过`re.findall()来提取城市的csv文件,但是当我尝试这样做并将结果写入另一个csv文件时,它会循环多次!
import io
import csv
import re
lines=0
outfile1 =codecs.open('/mesh/وسطى.csv','w','utf_8')
outfile6 =codecs.open('/mesh/أخرى.csv','w','utf_8')
with io.open('/mishal.csv','r',encoding="utf-8",newline='') as f:
reader = csv.reader(f)
for row in f :
for rows in row:
lines += 1
#الوسطى
m = re.findall('\u0634\u0642\u0631\u0627\u0621',row)
if m:
outfile1.write(row)
else:
outfile6.write(row)
print("saved In to mishal !")
f.close()
我希望re.finall()
个城市不要循环,只需为每场比赛执行一次 - 不要只是在匹配时多次loooooooping。
这是输出的屏幕截图,显示了过多的循环:
答案 0 :(得分:1)
csv reader为文件的每一行返回一个列表 - 你的外部循环遍历行/行,你的内部循环遍历每行中的项目。目前尚不清楚你想要什么。但是对于每行中的每个项目都会发生条件写入。如果您的目的是检查并查看行中是否有匹配项,而不是行中的项目,
for row in f :
match = False
for item in row:
lines += 1 #??
#الوسطى
match = re.search('\u0634\u0642\u0631\u0627\u0621',item)
if match:
outfile1.write(row)
else:
outfile6.write(row)
你可以在不使用csv阅读器的情况下迭代文件中的行来完成同样的事情
with io.open('/mishal.csv','r',encoding="utf-8",newline='') as f:
for line in f:
#الوسطى
if re.search('\u0634\u0642\u0631\u0627\u0621',line):
outfile1.write(line)
else:
outfile6.write(line)