【问题标题】:Python csv reader incomplete file line iterationPython csv阅读器不完整的文件行迭代
【发布时间】:2017-06-21 00:51:20
【问题描述】:

这是我的问题。我需要解析一个逗号分隔的文件,并且我的代码可以按照我的意愿运行,但是在测试它并尝试破坏时我遇到了一个问题。

示例代码如下:

import csv
compareList=["testfield1","testfield2","testfield3","testfield4"]
z=open("testFile",'r')
x=csv.reader(z,quotechar='\'')
testDic={}
iter=0
for lineList in x:
    try:
        for item in compareList:
            testDic[item]=lineList[iter]
            iter+=1
        iter=0
    except IndexError:
        iter=0
        lineList=[]
        for item in compareList:
            testList.append("")
            testDic[item]=lineList[iter]
            iter+=1
        iter=0

    for item in compareList:
        testFile.write(testDic[item])
        if compareList.index(item)!=len(compareList)-1
            testFile.write(",")
    testFile.write('\n')
testFile.close()
z.close()

所以这应该做的是检查并确保 csv 文件的每一行都与列表的长度相匹配。如果行的长度与列表的长度不匹配,则将行转换为等于 compareList 长度的空值(逗号)。 以下是文件内容的示例:

,,"sometext",343434
,,"moretext",343434
,,"stuff",4543343
,,"morestuff",3434354

如果该行缺少一个项目,该代码可以正常工作。所以at文件的输出包含:

,"sometext",343434
,,"moretext",343434
,,"stuff",4543343
,,"morestuff",3434354

看起来像这样:

,,,,
,,"moretext",343434
,,"stuff",4543343
,,"morestuff",3434354

我引起的问题是当这条线看起来像这样:

,"sometext",343434
,,"moretext",343434
,,"St,'",uff",4543343
,,"morestuff",3434354

这个文件的输出将是:

,,,,
,,"moretext",343434
,,,,

因此它将按预期应用更改并将第 1 行和第 3 行清空,但它只是在该行停止处理。我一直在努力弄清楚这里发生了什么,但没有运气。

一如既往,我非常感谢您愿意提供的任何帮助。

【问题讨论】:

  • 您的 CSV 在“问题”文件中的格式不正确...

标签: python python-2.7 csv parsing


【解决方案1】:

只需打印 csv.reader 返回的每一行即可了解问题所在:

>>> import csv
>>> z=open("testFile",'r')
>>> x=csv.reader(z,quotechar='\'')
>>> for lineList in x:
...     print lineList
...
['', '"sometext"', '343434']
['', '', '"moretext"', '343434']
['', '', '"St', '",uff",4543343\n,,"morestuff",3434354\n']

最后两行只是 csv.reader 的一行。 现在,只需删除 quotechar='\''

>>> import csv
>>> z=open("testFile",'r')
>>> x=csv.reader(z)
>>> for lineList in x:
...     print lineList
...
['', 'sometext', '343434']
['', '', 'moretext', '343434']
['', '', "St,'", 'uff"', '4543343']
['', '', 'morestuff', '3434354']

【讨论】:

  • 谢谢您,先生。我知道了。在我开始将我的代码应用到 csv 之前,问题就出现了。但是,如果我删除 quotechar,它将无法正确处理我的文件。什么是处理格式错误的行的好方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
相关资源
最近更新 更多