【问题标题】:Reading CSV, List length not matching after splitting cell values读取 CSV,拆分单元格值后列表长度不匹配
【发布时间】:2021-11-11 14:41:51
【问题描述】:

所以,我遇到了一个编码问题(duh),它涉及 python 中的许多不同组件(读取 .csv,将值提取到列表中,然后操作这些单独的值)

所以当我执行程序时,我的代码确实可以工作,但是,我期望看到的数字与输出的数字不匹配。为了确定,我进行了验证检查,并且我关闭了大约 800 个条目....除非我遗漏了一些东西 - 我不知道为什么。

因此,此 .csv 中有 1213 行,每行中有 6 个值,以空格分隔。 即 - A1 的值为 01 02 03 04 05 06 A2 的值为 07 08 09 10 11 12 等... 每行有 6 个值,我总共应该有 7278 个单独的值。

但是,当我执行我的代码并对生成的列表进行计数时,我总共得到 6409 个。这是 869 个值的差异。除非我在计数的地方遗漏了一些东西,否则我无法弄清楚丢失的 869 在哪里。是计算我列表中的空格和逗号吗?

现在 - 进入代码:

with open('hoursWorked.csv', newline='') as inputfile:
    for row in csv.reader(inputfile):
        pwrNumList.append(row[1])

# remove the top title of hours worked in csv file
pwrNumList.pop(0)

# Split the six values in each cell and create a separated number as a seperate value that is in between a space bar
pwrNumSplitLst = [item for sublist in [item.split(" ") for item in pwrNumList] for item in sublist]

print (len(pwrNumSplitLst)) #<---This value is coming out to 6409 when it should be 7278 (1213 * 6)

有什么想法吗?

【问题讨论】:

  • 尝试从读取的数据(格式相同)重新创建 CSV 文件,并使用差异工具找出缺少哪些行。然后,您可以进一步检查这些内容。
  • 我曾尝试复制您的问题,但由于该行只有 1 个元素而导致代码中断,并且 row[1] 引发了异常。我已将其更改为 row[0],然后我得到了正确的输出 7278。
  • 提供文件的前几行以确保我们理解格式。听起来它有一个标题行,例如Col1,Col2A1,01 02 03 04 05 06A2,07 08 09 10 11 12 之后的 1213 行,对吗?我会添加检查len(item.split(' ')) == 6 的代码,因为每一行的长度都不能正确。

标签: python list csv


【解决方案1】:

下面被注释掉的代码会按照描述生成文件,其余部分会正确计算。在您的文件上运行脚本以查找不符合模式的行:

import csv

#with open('hoursWorked.csv', 'w', newline='') as f:
#    w = csv.writer(f)
#    w.writerow(['Col1','Col2'])
#    for i in range(1213):
#        w.writerow([f'A{i+1}',f'{i*6} {i*6+1} {i*6+2} {i*6+3} {i*6+4} {i*6+5}'])

pwrNumList = []
with open('hoursWorked.csv', newline='') as f:
    r = csv.reader(f)
    next(r) # skip header
    for i,row in enumerate(r,2): # count lines starting at 2
        values = row[1].split()
        if len(values) != 6:
            print(f'row {i} length is {len(values)}')
        pwrNumList.extend(values)

print(len(pwrNumList))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多