【问题标题】:Iterator should return strings, not list error with csv.reader迭代器应该返回字符串,而不是使用 csv.reader 列出错误
【发布时间】:2018-05-10 11:51:52
【问题描述】:

此代码显示标题中的错误。请帮帮我。我编写了以下代码以写入从另一个文件读取输入的 csv 文件,但这显示了错误。当我将“r”更改为“rb " 然后它显示“迭代器应该返回字节”错误。

error->Traceback(最近一次调用最后一次): 文件“C:/Users/abhirav.sati/Downloads/salesdata.py”,第 34 行,在 csv_reader(csvReader,路径) csv_reader 中的文件“C:/Users/abhirav.sati/Downloads/salesdata.py”,第 11 行 对于读取的行: _csv.Error: 迭代器应该返回字符串,而不是列表(您是否以文本模式打开文件?)

import csv
def csv_reader(fileobj,path):
    read=csv.reader(fileobj,delimiter=',')
    with open(path, "wt") as csv_file:
        write=csv.writer(csv_file, delimiter=',')
        i=1
        for row in read:
            if(i==1):
                write.writerow(",".join(row))
                i=2
                continue
            if(row[3]=="Trade"):
                continue
            else:
                if(row[6]==NULL):
                    r=[row[0],row[0],"A,",row[8],row[9],row[0]]
                    #r=row[0]+row[0]+"A,"+row[8]+row[9]+row[0]
                    write.writerow(r)
                else:
                    r=[row[0],row[0],"B,",row[6],row[7],row[0]]
                    #r=row[0]+row[0]+"A,"+row[8]+row[9]+row[0]
                    write.writerow(r)
if __name__ == "__main__":
    path="sales.csv"
    csv_path = "FlowEdge-TRTH-Time_Sales.csv"
    f_obj  = open(csv_path, "r")
    data=csv.reader((line.replace('\0','') for line in f_obj), delimiter=",")
    csv_reader(data,path)

【问题讨论】:

  • 请编辑您的问题以更正缩进并添加错误的完整回溯。

标签: python string python-3.x python-2.7 csv


【解决方案1】:

您的代码将csv.reader 应用于另一个 csv.reader 对象。仔细查看您的 __main__csv_reader 函数,确保您理解为什么会这样。

更好的解决方案是将with open... 与多个文件一起使用:

with open(path, 'wt') as f1, open('csv_path', 'r') as f2:
    write = csv.writer(f1, delimiter=',')
    read = csv.reader(f2, delimiter=',')

【讨论】:

  • 哦,很抱歉。但是在将第 3 行“read=csv.reader......”标记为注释并在第 7 行更新为“for row in fileobj”时,它显示了错误 - ->” 用于 fileobj 中的行:文件“E:\flowedge material\salesdata.py”,第 27 行,在 中 data=csv.reader((line.replace('\0','') for line in f_obj), delimiter=",") TypeError: a bytes-like object is required, not 'str'"
  • @abhihacker02,抱歉,cmets 不是编写代码的好地方。如果您想测试我的解决方案,请随时这样做,并在必要时更新您的问题。
猜你喜欢
  • 1970-01-01
  • 2017-01-29
  • 2012-01-20
  • 2013-04-21
  • 1970-01-01
  • 2023-01-22
  • 2018-03-24
  • 2020-05-06
  • 2018-02-15
相关资源
最近更新 更多