从csv文件中读取每一列

时间:2011-04-21 08:30:46

标签: python csv

我想读取csv文件的每一列并在将它们存储到表中之前进行一些修改。

我有一个csv文件:

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

在这里,我想要读取第一个值“1”,然后将其存储在变量中并使用此值执行某些操作,并与其他值类似。但是目前我可以读取整个文件,但找不到连续访问各列的方法。

谢谢。

3 个答案:

答案 0 :(得分:22)

Python有一个内置的csv模块。

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

答案 1 :(得分:6)

顶部的答案是灵活和pythonic,但如果你想要一些更紧凑和光滑的东西,一次从分隔数据(适合内存)中检索整个列,你也可以试试这个:

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))

比传统的pythonic更具传统性,但功能感仍然是:

# 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]

现在出去与iterables成为一体! ; - )

答案 2 :(得分:2)

您可以使用csv python模块:

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

创建一个像普通读者一样操作的对象   但将读取的信息映射到   密钥由密钥给出的字典   可选的fieldnames参数。如果   fieldnames参数被省略了   csvfile第一行中的值   将用作字段名称。如果   行读取的字段多于   字段名序列,剩下的   数据被添加为键入的序列   restkey的值。如果行读   字段数少于字段名   序列,其余的键采取   可选restval的值   参数。任何其他可选或   关键字参数传递给   基础读者实例。