Python:将元组列表转换为忽略引号内逗号的CSV字符串
解决方案
你的原始代码直接用逗号拼接元素,导致包含逗号的元素被错误分割成多个字段。正确的做法是使用Python内置的csv模块,它能自动处理元素内部的逗号,并按照需求添加引号。
import csv from io import StringIO lt = [('051623', 'O143', '1.23', '2023-05-16T18:30:00', '1M allen', 'millan'), ('051623', 'O207', '1.23', '2023-05-16T18:35:00', 'nM Mn, 4nM, 35uM Fe', 'wilo')] output = StringIO() # 配置CSV写入器:使用单引号包裹所有元素,逗号作为分隔符 writer = csv.writer(output, quotechar="'", quoting=csv.QUOTE_ALL, delimiter=',') # 处理空元素替换为'None' processed_rows = [[element if element else 'None' for element in tup] for tup in lt] writer.writerows(processed_rows) # 获取最终的CSV字符串并去除末尾换行 csv_string = output.getvalue().strip() print(csv_string)
代码说明
csv.writer的quotechar="'"指定使用单引号包裹元素,quoting=csv.QUOTE_ALL确保所有元素都被引号包裹(匹配你的预期输出)。delimiter=','设置字段分隔符为逗号,如果你希望分隔符后带空格,可以改为delimiter=', '。- 处理每行数据时,将空元素替换为
'None',和你原始代码的逻辑保持一致。 - 使用
StringIO将CSV内容写入内存中的字符串,而不是文件。
输出结果
运行上述代码后,输出结果为:
'051623','O143','1.23','2023-05-16T18:30:00','1M allen','millan' '051623','O207','1.23','2023-05-16T18:35:00','nM Mn, 4nM, 35uM Fe','wilo'
这完全符合你的需求,元素内部的逗号被保留在单引号包裹的内容中,不会被当作字段分隔符。
内容的提问来源于stack exchange,提问作者M Raj
相关产品推荐
相关产品推荐

