【问题标题】:Storing each row of a CSV as a separate list/dictionary将 CSV 的每一行存储为单独的列表/字典
【发布时间】:2014-11-19 17:10:10
【问题描述】:

我是编程新手,我正在尝试解析以竖线分隔的 CSV 文件,并将每个项目行(标题后的每一行)存储在单独的列表或字典中。

import csv
with open('toverdpython.csv', 'rb') as toverd:
    reader = csv.reader(toverd, delimiter='|', quoting=csv.QUOTE_NONE)
    
    rownum = 0
    i = 1

    for row in reader:
        #Save header row
        if rownum == 0:
            inputHeader = row
        else: 
            inputRow = {}
            inputRow[i] = row
            i + 1
            print(inputRow.items())
            
       
        rownum+=1

    toverd.close()

这正在生成以下输出:

[(2, ['"Test 8"', '"Test 8"', '', '"Test 8"', 'IUGIGUGUI', 'A', 'EA', '602132312952', '2',      'Default', '', '', '', '', '', '"Test 8"', '6123142', 'US', '', '', '', '', '2121231234', '', 'A', '00002', '4600018168', '1', 'A', '0', 'USD', '10026178', '"KGIUGUGIGIU"', 'SADH', '', '', ''])]
[(2, ['"Test 9"', '"Test 9"', '', '"Test 9"', 'BIGIUG802', 'A', 'EA', '6123124242', '2', 'Default', '', '', '', '', '', '"Test 9"', '3694498', 'US', '', '', '', '', '51124124'', 'A', '00002', '463325358', '1', 'A', '0', 'USD', '134345436178', '"MNONOINOIN"', 'SADAHRH', '', '', ''])]

数据是正确的,但我很难判断是否在循环的每次迭代中都覆盖了我的信息。我尝试阅读列表和字典,但我觉得自己完全迷路了。

我的目标是能够将文档的每一行存储在一个单独的数组中,例如 inputRow1[]、InputRow2[] 等,并按位置在每行中引用值,例如 inputRow2[3] 应该返回“测试 9”。

【问题讨论】:

  • 不幸的是,您只是丢弃了每个 inputRow。你说你想要 inputRow1[]、inputRow2{} 等……但通常我们会处理像 inputRow[1][] 等行的列表……这就是你想要的吗?

标签: python list python-2.7 dictionary


【解决方案1】:

我想这就是你想要的......

import csv
with open('toverdpython.csv', 'rb') as toverd:
    reader = csv.reader(toverd, delimiter='|', quoting=csv.QUOTE_NONE)
    
    # get the header
    inputHeader = next(reader)    

    # get the rest
    inputRows = [row for row in reader]

# just to vreify...
print inputHeader
for row in inputRows:
    print ', '.join(row)

【讨论】:

  • 这正是我想要的——“阅读器中的逐行”语法非常简洁,以至于我很难理解它在做什么......非常感谢。
  • 是的,列表推导可能令人费解,但以后向您的朋友炫耀很酷。
  • header 是代码中的未知变量。你能解释一下print header是什么意思吗
  • @LibinThomas - 我没有使用正确的变量名。谢谢你的收获。
【解决方案2】:

您正在像列表一样使用 inputRaw 字典,因此您最好只使用列表,例如inputRaw = []

您需要将inputRow = [] 放在 for 循环之前,否则您将在每次迭代中覆盖它。

还要在循环之前初始化i = 0,因为列表是从零开始的。

您可能想查看https://docs.python.org/2/library/csv.html#csv.DictReader 中的 csv.DictReader

【讨论】:

  • 谢谢,我一定会看看 DictReader。
猜你喜欢
  • 2017-11-20
  • 2020-10-04
  • 2021-06-27
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多