从csv文件中读取每一列

7 投票
3 回答
65326 浏览
提问于 2025-04-16 16:09

我想读取一个csv文件的每一列,然后在把它们存入表格之前进行一些修改。

我有一个这样的csv文件:

"1";"testOne";"ValueOne"
"2";"testTwo";"ValueTwo"
"3";"testThree";"ValueThree"

在这里,我想读取第一个值“1”,然后把它存储到一个变量里,并对这个值做一些操作,其他的值也是类似的。不过目前我可以读取整个文件,但找不到方法去访问每一行中的单独列。

谢谢。

3 个回答

2

你可以使用csv这个Python模块:

class csv.DictReader(csvfile[, fieldnames=None[, restkey=None[, restval=None[, dialect='excel'[, *args, **kwds]]]]])

这个模块可以创建一个对象,它的功能和普通的读取器差不多,但它会把读取到的信息放进一个字典里,字典的键是通过可选的fieldnames参数来指定的。如果你不提供fieldnames参数,那么CSV文件第一行的值会被用作字典的键。如果读取的行比fieldnames的数量多,剩下的数据会以restkey的值作为键放进字典里。如果读取的行比fieldnames的数量少,缺少的键会用可选的restval参数的值来填充。其他的可选参数或关键字参数会传递给底层的读取器实例。

7

上面的答案很灵活,也符合Python的风格,但如果你想要一种更简洁、更流畅的方法来一次性获取分隔数据的整列(前提是数据量适合放进内存),你可以试试这个:

c_reader = csv.reader(open('test.csv', 'r'), delimiter=';')

# say you want the second column, only...
col_2 = list(zip(*c_reader))[1] # keeping in mind that python is 0-indexed

# or if you want to come back for more later on, you can just do...
columns = list(zip(*c_reader))

这个方法比之前的更传统一些,但依然很实用:

# just using a good old list comprehension
col_2 = [x[1] for x in c_reader]

# you could also get all the rows simply in this way
rows = [x for x in c_reader]
row_2 = rows[1]

现在,去吧,和可迭代对象融为一体吧!;-)

24

Python自带了一个叫做 csv 的模块。

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        print row[0]

撰写回答