2017-08-10 77 views
0

这方面的Python 2.7Python的CSV阅读 - 我想我正在做一个列表的列表,但我只想要一个列表

我有一个csv文件,soq1,看起来像这样在记事本中:

csv file in Notepad

我用这个代码的文件中读取并显示列表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)) 

与结果: results

我期待soq1看起来像: [ '2', '3', '4', '5', '6']

换言之,没想到有额外的一组方括号。 我创建了一个列表清单吗?

我做错了什么?

+0

是的,你拥有的每 –

+1

你得到一个列表的列表,因为在一个CSV每一行一般有多个列,你看行时间列表的列表。 如果情况并非如此,为什么要做所有的CSV?您可以将您的文本文件读入平面列表。 https://stackoverflow.com/questions/3277503/how-do-i-read-a-file-line-by-line-into-a-list – trs

回答

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] 
1

每个数字都在一个单独的行上,这导致csv阅读器认为它们是单独的行而不是列。如果可以,应该更改csv文件,因为它不是一行csv文件的正确格式。

2

是的,你创建了一个列表的列表,但这是故意的,因为从本质上讲,CSV文件的目的是用新行分隔单独的条目,并且每个条目中的单独属性用逗号分隔(为什么他们称之为逗号分隔值)。

顺便说一句,这不是一个正确的CSV文件。惯例是第一行(也称为标题行)应表示逗号分隔的字符串,描述每个值在连续行/条目中的含义。

如果您要阅读该文件并生成['2','3','4','5','6'],则csv.reader不适合您的特定用例。您需要阅读每一行,并将其附加到列表中,或者读入整个文件并使用\n作为分隔符将其分割成列表。

1

csv.reader为文件中的每一行创建一个列表。在大多数情况下这是有意义的,因为大多数csv文件不是单列。

您可以随时与理解拼合列表:

foo = [item for inner in outer for item in inner] 
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)) 
+1

编号'csv.reader'不适合OP的特定用例,因为他不是在传统的CSV文件上操作,而且他期望输出的提示他不明白CSV文件应该如何格式化。 – JoshuaRLi

1

决定把我的评论移动到你的问题的答案,因为我觉得所有的答案这里并不反映你想达到的目标。

由于CSV中的每一行通常包含多列,因此您将获得列表的列表。

如果不是这样,为什么所有的CSV的东西?您可以将您的文本文件读入平面列表。

How do I read a file line-by-line into a list?

lines = tuple(open(filename, 'r'))

相关问题