【问题标题】:How to create list using first row of CSV file in python如何在python中使用CSV文件的第一行创建列表
【发布时间】:2015-05-02 05:20:46
【问题描述】:

我正在尝试使用 python 从 csv 文件的第一行(列标题)中创建一个列表。我把这个小脚本放在一起,但它打印了两个不同的列表。打印的第一项是 csv 的第一行,第二项打印在第二行。

我做错了什么?

import csv
import sys

with open('agentsFullOutput.csv') as csvFile:
    reader = csv.reader(csvFile)
    print csvFile.next()
    field_names_list = []
    field_names_list = csvFile.next()
    print field_names_list

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    每次调用.next() 时,它都会移动到文件中的下一行。因此,您只会在第一个 .next() 调用中获得 CSV 文件的标题:

    import csv
    
    with open('agentsFullOutput.csv') as csvFile:
        reader = csv.reader(csvFile)
        field_names_list = reader.next()
    

    任何后续的.next() 调用都将读取文件中的下一行,因此这将是一行数据。

    【讨论】:

    • csvFile.next() 将读取该行作为字符串并分配给field_names_list。也许你的意思是reader.next()csvFile.next().strip('\n').split(',')
    • @HaleemurAli:实际上是的,我的意思是reader.next() - 谢谢,我已经更新了答案。
    • @SimeonVisser 谢谢!我现在唯一遇到的问题是由每个角色组成的列表。我试过使用excel 方言,但它不起作用。 reader = csv.reader(csvFile, dialect='excel').
    【解决方案2】:

    每次调用next() 时,文件的下一行是yielded,直到到达文件末尾。

    在您的代码示例中,由于您调用了两次next(),并且在第二次调用中将其分配给field_name_list,因此它分配了第二行,而不是第一行。

    下面会将第一行赋值给变量field_names_list

    with open('agentsFullOutput.csv') as csvFile:
        reader = csv.reader(csvFile)
        field_names_list = next(reader)
    

    使用next(reader) 代替reader.next() 意味着代码可移植到Python 3。在3+ 系列上,迭代器的next() 方法已重命名为__next__() 以保持一致性。

    【讨论】:

    • 我已经对我的 CSV 文件进行了同样的尝试,该文件有大约 16 个元素,由 ';' 分隔但是 Python 将它作为列表中的单个字符串读取....我的意思是列表的长度是 1 而不是 16。但是从第二行开始,它被认为是 16。我不知道为什么会这样。有什么帮助吗??
    【解决方案3】:

    您可以使用 Pandas 库从庞大的数据集中读取前几行。

    import pandas as pd
    data = pd.read_csv("names.csv", nrows=1)
    

    你可以在nrows参数中提到要读取的行数。

    【讨论】:

      【解决方案4】:
              with open(__csvfile) as csvFile:
                  reader = csv.DictReader(csvFile)
      

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2011-01-06
        • 1970-01-01
        • 2011-05-06
        • 2014-09-10
        • 2016-07-18
        • 2015-06-05
        • 1970-01-01
        相关资源
        最近更新 更多