Python csv读取器不完整的文件行迭代

2024-10-05 14:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的问题。我需要解析一个逗号分隔的文件,我已经让我的代码按照我想要的方式工作,然而,当我测试它并试图破坏一些东西时,我遇到了一个问题。在

下面是示例代码:

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长度的空值(逗号)。 以下是文件中的示例:

^{pr2}$

如果行中缺少一个项,代码就可以正常工作。因此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行,但它只是在该行停止处理。我一直在想办法弄清楚这里到底发生了什么事,但运气不好。在

一如既往,我非常感谢你愿意给予的任何帮助。在


Tags: 文件csv代码inforitemwrite逗号
1条回答
网友
1楼 · 发布于 2024-10-05 14:30:18

只需打印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']

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

^{pr2}$

相关问题 更多 >