这涉及到Python 2.7
我有一个csv文件,soq1,在记事本中看起来像这样:
我使用此代码读取文件并显示列表soq1的内容:
import csv
with open('D:\Users\Richard\Python\soq1.csv','rb') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
soq1=list(readCSV)
print(soq1)
print(type(soq1))
print(len(soq1))
我期待soq1看起来像: [ '2', '3', '4', '5', '6']
换句话说,我没想到会有额外的方括号。 我是否创建了一个列表列表?
我做错了什么?
答案 0 :(得分:2)
是的,您创建了一个列表列表,但这是故意的,因为从本质上讲,CSV文件具有由新行分隔的单独条目,以及用逗号分隔的每个条目中的单独属性(为什么它们将其称为逗号分隔值)。
顺便说一下,这不是一个合适的CSV文件。惯例是第一行(也称为标题行)应该表示逗号分隔的字符串,描述每个值在连续的行/条目中的含义。
如果您想阅读该文件并生成['2','3','4','5','6']
,则csv.reader
不适合您的特定用例。您将需要读取每个单独的行并将其附加到列表中,或者读取整个文件并使用\n
作为分隔符将其拆分为列表。
答案 1 :(得分:1)
每个数字都在一个单独的行上,这导致csv读者认为它们是单独的行而不是列。你应该更改csv文件,因为这不是一行csv文件的正确格式。
答案 2 :(得分:1)
你没有做错任何事 - csv
模块每行只返回一个列表(这对于每行中有多个条目的CSV都有意义。)
您可以使用
拼合您的列表soq2 = [elt for lst in soq1 for elt in lst]
虽然对于这样一个简单的文件,您根本不需要将其作为CSV处理(文件扩展名并不重要。)您可以这样做:
with open(my_file) as f:
soq1 = [line.strip() for line in f]
答案 3 :(得分:1)
csv.reader
为文件中的每一行创建一个列表。在大多数情况下这是有道理的,因为大多数csv文件不是单个列。
您可以随时理解列表:
foo = [item for inner in outer for item in inner]
答案 4 :(得分:1)
改进了代码
import csv
with open('D:\Users\Richard\Python\soq1.csv','rb') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
soq1=list(readCSV) #commnt this line
for line in readCSV:
print line
print type(line)
print len(line)
#print(soq1)
#print(type(soq1))
#print(len(soq1))
答案 5 :(得分:1)
决定将我的评论转移到你的问题答案,因为我觉得这里的所有答案都没有反映出你想要实现的目标。
您会看到一个列表列表,因为CSV中的每一行通常都有多列。
如果不是这样,为什么要做所有的CSV内容呢?您只需将文本文件读入平面列表即可。
How do I read a file line-by-line into a list?
lines = tuple(open(filename, 'r'))