Python中带引号的换行符的CSV

Python中带引号的换行符的CSV,python,csv,Python,Csv,我得到的印象是,这是一个常见的问题,我有一个csv文件,字段中有换行符。我正在寻找Python中的修复方法——如果可能的话,也在csv模块中 下面是我创建的一个示例文件 $ more test_csv.csv a,"b",c,d,"e e e",f a,bb,c,d,ee ,"f f" a,b,"c c",d,e,f 并非所有字段都将用引号括起来(尽管在本例中我的用法是随机的,但实际文件应与quoting=csv.QUOTE_MINIMAL匹配) 输出应该类似于 [[a,b,c,d,"e\ne

我得到的印象是,这是一个常见的问题,我有一个csv文件,字段中有换行符。我正在寻找Python中的修复方法——如果可能的话,也在csv模块中

下面是我创建的一个示例文件

$ more test_csv.csv
a,"b",c,d,"e
e
e",f
a,bb,c,d,ee ,"f
f"
a,b,"c
c",d,e,f
并非所有字段都将用引号括起来(尽管在本例中我的用法是随机的,但实际文件应与quoting=csv.QUOTE_MINIMAL匹配)

输出应该类似于

[[a,b,c,d,"e\ne\ne",f],[a,bb,c,d,ee,"f\nf"][a,b,"c\nc",d,e,f]]
相反,我得到了

[[['a', 'b', 'c', 'd', 'e\n']], [['e']], [['e"', 'f']], [['a', 'bb', 'c', 'd', 'ee ', 'f\n']], [['f"']], [['a', 'b', 'c\n']], [['c"', 'd', 'e', 'f']]]
请关注行和列的数量。另一个问题是,在第三行中,引用本不应该包含的

以下是我目前的代码:

导入csv

file = open('test_csv.csv', 'r')
rows = []
for line in file:
  fields = []  
  mycsv = csv.reader([line], dialect='excel', \
    quotechar='"', quoting=csv.QUOTE_MINIMAL)
  for field in mycsv:
    fields.append(field)
  rows.append(fields)

多谢各位

与其自己拆分行,不如让
csv.reader
执行以下操作:

>>> from StringIO import StringIO
>>> import csv
>>> file = StringIO("""a,"b",c,d,"e
e
e",f
a,bb,c,d,ee ,"f
f"
a,b,"c
c",d,e,f""")
>>> for line in csv.reader(file):
    print line

['a', 'b', 'c', 'd', 'e\ne\ne', 'f']
['a', 'bb', 'c', 'd', 'ee ', 'f\nf']
['a', 'b', 'c\nc', 'd', 'e', 'f']

进一步解释:通过自己在这些行上循环,并为每一行创建一个读取,您在逻辑上将文件视为每一行都是一个独立的完整csv文件。相反,您希望将整个文件视为csv文档。您可以通过将文件对象传递到
csv.reader
,因为迭代文件对象会迭代文件的行,或者自己读取文件,将行按换行分开,然后将所有拆分行的列表传递到一个
csv.reader

在答案中注意,您必须以二进制模式打开文件。通过循环
mycsv
您是在循环整行,而不是列。根本不要在
文件
对象上循环。@Claudiu的回答澄清了文件不需要以二进制形式读入。摘要:
csv。reader
解析文件,而不是行。