csv文件循环结果

时间:2017-12-04 19:05:32

标签: python file loops csv

我试图通过`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。

这是输出的屏幕截图,显示了过多的循环:

screenshot of script's output

1 个答案:

答案 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)