从csv文件中读取每一列
我想读取一个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]