【问题标题】:csv file loop resultscsv 文件循环结果
【发布时间】:2017-12-04 19:05:32
【问题描述】:

我正在尝试使用 `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() 城市不循环,每次匹配只执行一次,而不是在有匹配时循环这么多次。

这是显示过度循环的输出屏幕截图:

【问题讨论】:

  • 您能否举例说明输入、输出和预期输出?
  • 每行循环相同的结果大约 100 次,所以每行循环 100 次我不知道如何上传照片
  • 我希望文件继续我得到的每个城市的姓名号码电子邮件地址,但每个姓名、号码和电子邮件都会循环多次!我希望你能得到我
  • 编辑您的问题以添加照片/代码。
  • 请不要发布代码或数据的图像。

标签: python file loops csv


【解决方案1】:

csv 阅读器为文件的每一行返回一个列表 - 您的外循环正在迭代行/行,而您的内循环正在迭代每一行中的项目。不清楚你想要什么。但是您的条件 写入 发生在每一行中的每个项目上。如果您的意图是检查行中是否存在匹配项而不是行中的项,

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)

【讨论】:

  • 我可以删除这个答案,但真的不清楚你要做什么。
  • 好吧,让我解释一下我有一个至少包含 1500 行的文件,我想用 re 提取一些城市。及其对我的工作人员,但是当我将其写入 csv 文件时,我会得到每个结果的循环行,如图片
  • 为什么我的解决方案不起作用?它有什么问题?声明 non of this works for me:( 不是很有帮助。
  • 它与重新合作。并且没有循环,但我在 1 行中得到 2 行
猜你喜欢
  • 2021-10-10
  • 2016-08-29
  • 2011-04-15
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2020-07-30
相关资源
最近更新 更多