当前位置: 首页 > 知识库问答 >
问题:

在csv文件中单独读取列名

石喜
2023-03-14

我有一个包含以下列的csv文件

身份证、姓名、年龄、性别

后面是上述列的许多值。我试图单独阅读列名,并将其放入列表中。

我正在使用Dictreader,这提供了正确的详细信息:

with open('details.csv') as csvfile:
    i=["name","age","sex"]
    re=csv.DictReader(csvfile)
    for row in re:
        for x in i:
            print row[x]

但我想做的是,我需要用输入csv自动解析列列表,而不是在列表中硬编码。

with open('details.csv') as csvfile:
   
    rows=iter(csv.reader(csvfile)).next()
    header=rows[1:]
    re=csv.DictReader(csvfile)
    for row in re:
        print row
        for x in header:
            
            print row[x]

这给出了一个错误

Keyerrror:'name'

在行打印行[x]中。我哪里做错了?是否可以使用Dictreader获取列名?

共有3个答案

欧阳元魁
2023-03-14

csv。DictReader对象公开一个名为fieldnames的属性,这就是您要使用的属性。下面是示例代码,后跟输入和相应的输出:

import csv
file = "/path/to/file.csv"
with open(file, mode='r', encoding='utf-8') as f:
    reader = csv.DictReader(f, delimiter=',')
    for row in reader:
        print([col + '=' + row[col] for col in reader.fieldnames])

输入文件内容:

col0,col1,col2,col3,col4,col5,col6,col7,col8,col9
00,01,02,03,04,05,06,07,08,09
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29
30,31,32,33,34,35,36,37,38,39
40,41,42,43,44,45,46,47,48,49
50,51,52,53,54,55,56,57,58,59
60,61,62,63,64,65,66,67,68,69
70,71,72,73,74,75,76,77,78,79
80,81,82,83,84,85,86,87,88,89
90,91,92,93,94,95,96,97,98,99

打印报表输出:

['col0=00', 'col1=01', 'col2=02', 'col3=03', 'col4=04', 'col5=05', 'col6=06', 'col7=07', 'col8=08', 'col9=09']
['col0=10', 'col1=11', 'col2=12', 'col3=13', 'col4=14', 'col5=15', 'col6=16', 'col7=17', 'col8=18', 'col9=19']
['col0=20', 'col1=21', 'col2=22', 'col3=23', 'col4=24', 'col5=25', 'col6=26', 'col7=27', 'col8=28', 'col9=29']
['col0=30', 'col1=31', 'col2=32', 'col3=33', 'col4=34', 'col5=35', 'col6=36', 'col7=37', 'col8=38', 'col9=39']
['col0=40', 'col1=41', 'col2=42', 'col3=43', 'col4=44', 'col5=45', 'col6=46', 'col7=47', 'col8=48', 'col9=49']
['col0=50', 'col1=51', 'col2=52', 'col3=53', 'col4=54', 'col5=55', 'col6=56', 'col7=57', 'col8=58', 'col9=59']
['col0=60', 'col1=61', 'col2=62', 'col3=63', 'col4=64', 'col5=65', 'col6=66', 'col7=67', 'col8=68', 'col9=69']
['col0=70', 'col1=71', 'col2=72', 'col3=73', 'col4=74', 'col5=75', 'col6=76', 'col7=77', 'col8=78', 'col9=79']
['col0=80', 'col1=81', 'col2=82', 'col3=83', 'col4=84', 'col5=85', 'col6=86', 'col7=87', 'col8=88', 'col9=89']
['col0=90', 'col1=91', 'col2=92', 'col3=93', 'col4=94', 'col5=95', 'col6=96', 'col7=97', 'col8=98', 'col9=99']
钱欣然
2023-03-14

您可以使用Next()函数读取标头,该函数将读取器的可迭代对象的下一行作为列表返回。然后您可以将文件的内容添加到列表中。

import csv
with open("C:/path/to/.filecsv", "rb") as f:
    reader = csv.reader(f)
    i = reader.next()
    rest = list(reader)

现在我将列的名称作为列表。

print i
>>>['id', 'name', 'age', 'sex']

还要注意读取器。next()在python 3中不起作用。而是使用内置的next()在读取后立即获取csv的第一行,如下所示:

import csv
with open("C:/path/to/.filecsv", "rb") as f:
    reader = csv.reader(f)
    i = next(reader)

    print(i)
    >>>['id', 'name', 'age', 'sex']
锺离鸿
2023-03-14

虽然您已经有了一个公认的答案,但我想我会为其他对不同解决方案感兴趣的人添加此选项-

  • CSV模块中Python的DictReader对象(从Python 2.6及更高版本开始)有一个名为fieldnames的公共属性。https://docs.python.org/3.4/library/csv.html#csv.csvreader.fieldnames

实施方式如下:

import csv

with open('C:/mypath/to/csvfile.csv', 'r') as f:
    d_reader = csv.DictReader(f)

    #get fieldnames from DictReader object and store in list
    headers = d_reader.fieldnames

    for line in d_reader:
        #print value in MyCol1 for each row
        print(line['MyCol1'])

在上面,d_reader.fieldnames返回标题列表(假设标题在最上面的一行)。这允许...

>>> print(headers)
['MyCol1', 'MyCol2', 'MyCol3']

如果您的标题位于第二行(最上面一行是第1行),您可以执行以下操作:

import csv

with open('C:/mypath/to/csvfile.csv', 'r') as f:
    #you can eat the first line before creating DictReader.
    #if no "fieldnames" param is passed into
    #DictReader object upon creation, DictReader
    #will read the upper-most line as the headers
    f.readline()

    d_reader = csv.DictReader(f)
    headers = d_reader.fieldnames

    for line in d_reader:
        #print value in MyCol1 for each row
        print(line['MyCol1'])
 类似资料:
  • 问题内容: 我有一个包含以下各列的csv文件: 身份证,姓名,年龄,性别 接下来是以上各列的很多值。我试图单独读取列名称,并将其放在列表中。 我正在使用Dictreader,它给出了正确的细节: 但是我想做的是,我需要使用输入csv自动解析列列表(在上述情况下为“ i”),而不是在列表中进行硬编码。 这给出了一个错误 在行打印行[x]中。我要去哪里错了?是否可以使用Dictreader提取列名称?

  • 我想从多列csv文件中读取特定列,并使用Java在其他csv文件中打印这些列。需要帮忙吗?下面是我逐行打印每个令牌的代码。。但我希望只打印多列csv中的几列。

  • 这是我在大学的一个项目,一切似乎都很好,除了游戏课,它初始化了游戏。下面是一个片段 之后是一些getter和我要实现的4个方法。这些方法是、、、 我创建了,以便它在此处返回String[]的数组列表: 然后,我想加载一些攻击、敌人和龙,并将它们插入相应的数组列表中。 我在此处应用了: 我这样写它,它接受从返回的ArrayList,并使用开关在ArrayList中的每个String[]中搜索第一个字

  • 问题内容: 我正在开发一个概念验证应用程序,以便可以在我正在开发的更大的应用程序中实现该功能。我对Java和Android Dev有点陌生,但希望这个问题不会太简单或太复杂。 基本上,我正在尝试从CSV文件中读取字符串列表,并使其可用于在应用程序的主活动中显示该列表。 我正在使用外部类来读取CSV文件。这是课程代码: CSVFile.java 这是我的主要活动代码: MainActivity.ja

  • 问题内容: [编辑] 我使用 D3 解决了这个问题,不用了,谢谢! 所以我有一个看起来像这样的csv文件,我需要将本地csv文件导入到我的客户端javascript中: 我最终需要解析它并输出如下内容: 但就目前而言,我仍然只是将其导入javascript。 我当前的代码如下所示: 我已经研究并找到了一些关于的有用链接,但是我是javascript的新手,我并不完全了解它。我应该使用Ajax吗?F

  • 问题内容: 我有一个CSV文件,下面是其外观示例: 我知道如何读取文件并打印每列(例如- )。但是我真正想做的是读取行,就像这样,然后依此类推。 然后,我想将这些数字存储到变量中,以便稍后将它们总计(例如): 。那我可以做。 我将如何在Python 3中做到这一点? 问题答案: 您可以执行以下操作: 要么 : 编辑: