我有一个文件(在这个例子中是“test.csv”)。我想得到这个csv的所有字段,并列出包含所有这些字段的列表。例如,我可以这样做:
import csv
def read_csv():
dr = csv.DictReader(open('test.csv', 'r', encoding='utf-8'))
result = []
for r in dr:
for n in r.values():
result+=n
return result
然而,如果csv变大,它似乎非常低效。
我试过了:
import csv
def read_csv():
dr = csv.DictReader(open('test.csv', 'r', encoding='utf-8'))
return [n for row in dr for n in row.values()]
但是它会返回一个列表列表,每个列表包含一行的内容,而不是包含每行内容的一个大列表。
最佳解决方案是什么?
csv文件的例子(注意空白的第一行):
w1, w2, w3
w4, w5
答案 0 :(得分:3)
因为您只使用词典'值,您可以将csv.DictReader()
替换为csv.reader()
并使用列表解析:
def read_csv():
with open('test.csv') as f:
reader = csv.reader(f)
return [col for row in reader for col in row]
答案 1 :(得分:0)
这将逐行产生CSV作为列表:
import csv
def read_csv():
file = open('test.csv', 'r', encoding='utf-8')
reader = csv.reader(file)
for row in reader:
yield row
file.close()
如果您想要包含所有CSV字段的列表,您可以这样做:
import csv
def read_csv():
file = open('test.csv', 'r', encoding='utf-8')
reader = csv.reader(file)
for row in reader:
yield from row
file.close()
import csv
def read_csv():
file = open('test.csv', 'r', encoding='utf-8')
reader = csv.reader(file)
for row in reader:
for value in row:
yield value
file.close()
如果您需要将结果作为列表,则返回生成器:
list(read_csv())
答案 2 :(得分:0)
要创建包含所有数据的单个列表(即不是列表列表),请使用extend()
将新元素添加到现有列表中:
import csv
def read_csv():
data = []
with open('test.csv', 'r', encoding='utf-8') as f_input:
for row in csv.reader(f_input):
data.extend(row)
return data
如果您的csv文件包含:
1,2,3,4,5
6,7,8,9,10
返回的data
将是:
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]