Python 将.csv文件的每一列解析为单个列表
我有以下类型的csvPython 将.csv文件的每一列解析为单个列表,python,csv,python-2.4,Python,Csv,Python 2.4,我有以下类型的csv a,b,c 1,2,3 4,5,6 7,8,9 我想把这个csv文件的每一列都解析成一个没有列的列表,这样最终的结果就是 myList = ["1","4","7","2","5","8","3","6","9"] 我已经为一列找到了许多解决方案,但我需要灵活地阅读文件的每一列。我使用的是较旧版本的python,因此无法在pandas库中使用任何解决方案。您可以完全阅读该文件,然后zip对行进行转置,然后将结果链接起来以展平列表。独立示例(使用字符串列表作为输入): 结
a,b,c
1,2,3
4,5,6
7,8,9
我想把这个csv文件的每一列都解析成一个没有列的列表,这样最终的结果就是
myList = ["1","4","7","2","5","8","3","6","9"]
我已经为一列找到了许多解决方案,但我需要灵活地阅读文件的每一列。我使用的是较旧版本的python,因此无法在pandas库中使用任何解决方案。您可以完全阅读该文件,然后
zip
对行进行转置,然后将结果链接起来以展平列表。独立示例(使用字符串列表作为输入):
结果:
['1', '4', '7', '2', '5', '8', '3', '6', '9']
它将从一个文件中读取:
with open("test.csv") as f:
cr = csv.reader(f,separator=",") # comma is by default, but just in case...
next(cr) # skip title
myList = list(itertools.chain.from_iterable(zip(*cr)))
简单方法:
d = """a,b,c
1,2,3
4,5,6
7,8,9
"""
cells = []
for line in d.split("\n"):
if line:
cells.append(line.strip().split(','))
print(cells)
for n in range(len(cells[0])):
for r in cells:
print(r[n])
相同的迭代,但与生成器相同:
def mix(t):
for n in range(len(t[0])):
for r in t:
yield r[n]
print( list( mix(cells) ) )
使用
csv
和chain
展平列表
import csv
from itertools import chain
l = list(csv.reader(open('text.csv', 'r')))
mylist = map(list, zip(*l[1:])) # transpose list
list(chain.from_iterable(mylist)) # output ['1', '4', '7', '2', '5', '8', '3', '6', '9']
没有直接的方法可以做到这一点,您必须循环遍历每一行,并在single
array
splitlines()中添加它,这只是为了创建一个独立的示例。文件不需要拆分行。检查我的第二个示例,其中输入是一个文件。不要使用DictReader
,因为值的顺序取决于键的顺序,而键的顺序不是您想要的。谢谢,我尝试了代码,但我得到了['1;2;3','4;5;6','7;8;9'],nvm。。。excel在骗我。。。它加了一个“;”而不是“,”这是因为您的文件与您发布的文件不匹配。尝试添加分隔符(请参见我的编辑)
import csv
from itertools import chain
l = list(csv.reader(open('text.csv', 'r')))
mylist = map(list, zip(*l[1:])) # transpose list
list(chain.from_iterable(mylist)) # output ['1', '4', '7', '2', '5', '8', '3', '6', '9']