【发布时间】:2019-05-12 04:15:51
【问题描述】:
CSV 文件包含以下数据,
"1111"","2222"2222","3333, 33, 33","444",""
csv 阅读器将这些数据读取为,
['"1111""', '"2222"2222"', '"3333', '33', '33"', '"444"', '""']
当我尝试将此阅读器对象转换为列表并尝试使用每个循环对其进行迭代时,循环将“3333、33、33”视为三个不同的值。我的要求是将其作为单个字符串读取。
代码:
reader = csv.reader(csv_file, delimiter=',', quotechar="'", escapechar = "'")
for row in reader:
colValues = list(row)
print(colValues)
for each in colValues:
print(each)
当前输出:
"1111""
"2222"2222"
"3333
33
33"
"444"
""
所需的输出:
"1111""
"2222"2222"
"3333, 33, 33"
"444"
""
【问题讨论】:
-
文件看起来
quotechar应该是双引号。 -
quotechar应该是@schwobaseggl 建议的双引号,但即使这样也不能解决问题,因为文件格式不正确。"1111""和2222"2222内部存在未转义的双引号的问题。这个文件来自哪里? -
引号(数量)重要吗?否则你可以做
df = pd.read_csv(csv_file, sep='","', header=None, engine='python')。这将为您提供输出:"1111"; 2222"2222 ; 3333, 33, 33; 444; "(';' 在此示例中是值的分隔符) -
@buran - 我们从第三方获取此文件,因此我们对此没有任何控制权。它也可能在字符串值中包含双引号。我正在创建一个实用程序来以正确的格式修复它。
-
如果你只是用
string.split(",\"")拆分它然后做一个列表理解[i if i.startswith("\"") else "\""+i for i in result]会更容易吗?
标签: python list csv foreach reader