Python csv reader不完整的文件行迭代

标签 python python-2.7 csv parsing

这是我的问题。我需要解析一个逗号分隔的文件,并且我的代码可以按照我想要的方式工作,但是在测试它并尝试破坏东西时我遇到了问题。

这里是示例代码:

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.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']

关于Python csv reader不完整的文件行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027818/

相关文章:

python - 用于多个输入的 SequenceMatcher,而不仅仅是两个?

python - 在模型 2 的 TreeView 中显示模型 1 的字段

Python如何检查并响应套接字数据中的特定字符串?

python - 使用 Anaconda Python 的 PyQt Windows 安装程序——未找到 PyQt4;我该如何排除故障?

php - Laravel 的最佳 CSV 操作包

python - Django - 在 DRF 中反序列化 JSONField

python - 在推理服务中使用 tf.Session 时它是线程安全的吗?

windows - 批量合并 CSV 删除 header

python - 类型错误 : must be str, 未列出

python - 如何制作列表列表中元素的有序频率列表