Python中带引号的换行符的CSV
我得到的印象是,这是一个常见的问题,我有一个csv文件,字段中有换行符。我正在寻找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
$ 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
解析文件,而不是行。