如何将 csv 文件转换为 python 中的列表列表
Posted
技术标签:
【中文标题】如何将 csv 文件转换为 python 中的列表列表【英文标题】:How can I turn a csv file into a list of list in python 【发布时间】:2016-07-11 17:47:24 【问题描述】:我希望能够将 csv 文件转换为列表列表,其中包含每个列表的列值。例如:
6,2,4
5,2,3
7,3,6
进入
[[6,5,7],[2,2,3],[4,3,6]]
我只设法打开文件,并且只成功将其打印为行
with open(input,'rb') as csvfile:
csv_file = csv.reader(csvfile)
header = csv_file.next()
raw_data = csv_file
【问题讨论】:
***.com/questions/16503560/… import csv aList =[] with open('/Users/YYY/Desktop/Workbook1.csv', 'rU') as f: reader = csv.reader(f) for row in reader: aList.append(row) 打印 aList # [['6', '2', '4'], ['5', '2', '3'], ['7', '3', '6' ]] 输出需要按列排列所以[[6,5,7],[2,2,3],[4,3,6]] 【参考方案1】:或者像这样……
from csv import reader
with open('test.csv') as csv_file:
csv_reader = reader(csv_file)
rows = list(csv_reader)
print(rows)
【讨论】:
【参考方案2】:如果您确定每行中的项目数量是固定的,您可以使用zip:
import csv
with open('test.csv') as csvfile:
rows = csv.reader(csvfile)
res = list(zip(*rows))
print(res)
# [('6', '5', '7'), ('2', '2', '3'), ('4', '3', '6')]
或者如果行中的项目数量不同:
6,2,4
5,2
7
使用zip_longest 和filter:
import csv
from itertools import zip_longest
with open('test.txt') as csvfile:
rows = csv.reader(csvfile)
res = list(zip_longest(*rows))
print(res)
# [('6', '5', '7'), ('2', '2', None), ('4', None, None)]
res2 = [list(filter(None.__ne__, l)) for l in res]
print(res2)
# [['6', '5', '7'], ['2', '2'], ['4']]
【讨论】:
如果你使用的是 python2.x,或者从 itertools izip,除非你真的需要一个列表,否则避免把它变成一个列表:-)【参考方案3】:您可以先将其读入列表列表:
from csv import reader as csvreader
with open(input, 'r') as fp:
reader = csvreader(fp)
li = list(reader)
然后把它切成一个新的序列,我相信itertools还有其他技巧,但这就是我想出的:
from itertools import count
def my_gen():
for i in count():
try:
yield [x[i] for x in li]
except IndexError:
break
您现在可以将生成器变成一个列表,其中包含所需的列作为行。
list(my_gen())
【讨论】:
@germn 的回答比我的好。 zip/izip 基本上完成了 my_gen 所做的工作。以上是关于如何将 csv 文件转换为 python 中的列表列表的主要内容,如果未能解决你的问题,请参考以下文章
如何将 csv 文件转换为可作为文本读取的列表列表? Python