Python CSV阅读-我想我';I’我正在列一张清单,但我只想要一张清单

Python CSV阅读-我想我';I’我正在列一张清单,但我只想要一张清单,python,csv,Python,Csv,这与Python2.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(l

这与Python2.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']

换句话说,我没想到会有额外的方括号。 我是否创建了列表列表


我做错了什么?

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

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

是的,您创建了一个列表列表,但这是有意的,因为本质上,csv文件意味着有单独的条目以新行分隔,每个条目中有单独的属性以逗号分隔(为什么他们称之为逗号分隔值)

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


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

是的,您创建了一个列表列表,但这是有意的,因为本质上,csv文件具有单独的属性条目由新行分隔,每个条目中的属性由逗号分隔(为什么称之为逗号分隔值)

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


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

您没有做错任何事情-
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]

您没有做错任何事情,
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]

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

您始终可以通过理解将列表展平:

foo = [item for inner in outer for item in inner]

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

您始终可以通过理解将列表展平:

foo = [item for inner in outer for item in inner]
改进了代码

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))
改进了代码

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))

我决定把我对你的问题的评论转移到一个答案上来,因为我觉得这里的所有答案都不能反映你想要实现的目标


因为CSV中的每一行通常有多个列,所以您会得到一个列表列表

如果不是这样,为什么要做所有CSV的东西呢?你可以把你的文本文件读入一个简单的列表

lines=tuple(打开(文件名'r'))


我决定把我对你的问题的评论转移到一个答案上来,因为我觉得这里的所有答案都不能反映你想要实现的目标


因为CSV中的每一行通常有多个列,所以您会得到一个列表列表

如果不是这样,为什么要做所有CSV的东西呢?你可以把你的文本文件读入一个简单的列表

lines=tuple(打开(文件名'r'))


是的,您每次读取一行时都会有一个列表您会得到一个列表列表,因为CSV中的每一行通常都有多个列。如果不是这样,为什么要执行所有CSV内容?您可以将文本文件读取到一个平面列表中。是的,您每次读取一行时都会有一个列表您会得到一个列表列表列表,因为CSV中的每一行都是相同的通常有多列。如果不是这样,为什么要做所有的CSV内容?你可以将文本文件读入一个简单的列表中。不。
CSV。reader
不适合OP的特定用例,因为他不是在传统的CSV文件上操作,他希望输出提示他不理解CSV文件应该是什么格式化的like.No.
csv.reader
不适合OP的特定用例,因为他不是在传统的csv文件上操作,并且他期望输出提示他不理解csv文件的格式。