这可能会起作用:import csv
import io
file = io.StringIO(u'''
"ThinkPad";"2000.00";"EUR"
"MacBookPro";"2200.00;EUR"
'''.strip())
reader = csv.reader((line.replace('"', '') for line in file), delimiter=';', quotechar='"')
for row in reader:
print(row)
问题是如果有任何合法的引用行,例如
^{pr2}$
或者,更糟的是:"MacBookPro:
Description: Awesome Edition";"2200.00";"EUR"
您的输出将生成太少/太多的列。但如果你知道这不是问题,那么它会很好地工作。您可以通过在读取部分之前添加以下内容来预筛选文件,这将导致出现格式错误的行:for line in file:
if line.count(';') != 2:
raise ValueError('No! This file has broken data on line {!r}'.format(line))
file.seek(0)
或者,你也可以在阅读时进行筛选:for row in reader:
if any(';' in _ for _ in row):
print('Error:')
print(row)
最终,最好的选择是修复产生垃圾csv文件的任何内容。在