Python实现CSV转TSV:如何处理字段内包含逗号的情况
如何安全地将CSV转换为TSV(避免破坏字段内的逗号)
当然有靠谱的办法!你一开始用re.sub(',', '\t', csv)直接替换的思路,确实会踩「字段内包含逗号」的坑——毕竟CSV里用双引号包裹的字段里的逗号是内容的一部分,不是分隔符。专业的CSV处理还是得靠专门的解析工具来搞定,以Python为例,内置的csv模块就能完美解决这个问题:
处理字符串形式的CSV内容
如果你的CSV是字符串格式,可以这样处理:
import csv # 示例CSV内容 csv_str = """dept_no,dt,hello 1,20180411,hello its me 2,20180412,here has tab 3,20180412,"here, is, commas" """ # 用csv.reader解析,自动识别带引号的字段 tsv_rows = [] for row in csv.reader(csv_str.splitlines()): # 将每行的字段用制表符连接 tsv_rows.append('\t'.join(row)) # 合并成完整的TSV字符串 tsv_str = '\n'.join(tsv_rows) print(tsv_str)
运行后输出的TSV会完整保留第三行字段内的逗号,结果如下:
dept_no dt hello 1 20180411 hello its me 2 20180412 here has tab 3 20180412 here, is, commas
处理文件形式的CSV
如果是处理本地CSV文件,直接用csv.writer指定制表符作为分隔符更高效:
import csv # 读取CSV文件并写入TSV文件 with open('input.csv', 'r', newline='') as in_file, open('output.tsv', 'w', newline='') as out_file: # 创建CSV读取器 csv_reader = csv.reader(in_file) # 创建TSV写入器,指定分隔符为制表符 tsv_writer = csv.writer(out_file, delimiter='\t') # 逐行写入 tsv_writer.writerows(csv_reader)
为什么不推荐用正则?
正则表达式很难精准区分「作为分隔符的逗号」和「字段内的逗号」——比如如果字段里出现了转义的引号、嵌套引号等复杂情况,正则的写法会变得极其繁琐且容易出错。而csv模块是专门为CSV格式设计的,能处理所有标准CSV的边缘情况,可靠性高得多。
内容的提问来源于stack exchange,提问作者Sophie.K
相关产品推荐
相关产品推荐

