Python读取CSV带引号内容写入TXT时引号丢失的解决求助
解决CSV写入时保留指定字段引号的问题
问题原因
csv.reader在解析带引号的字段时,会自动去除外层引号,所以你读取到的row_old[1]值是123456789abc而非带引号的原内容。默认情况下,csv.writer仅在字段包含分隔符、换行符等特殊字符时才会添加引号,因此写入时不会为这个字段自动补全引号,导致输出不符合预期。
另外你原写入代码存在参数错误:writer.writerow(new_file['first'], new_file['second'])会触发报错,因为writerow仅接受一个可迭代对象作为行数据,需要改为列表或元组形式。
解决方案
方案一:利用csv模块的引号策略自动添加
通过设置csv.writer的quoting=csv.QUOTE_NONNUMERIC参数,让非数字类型的字段自动被加上引号,正好匹配你的需求(第一个数字字段不加引号,第二个字符串字段加引号):
import csv line_to_write = [] # 读取CSV文件 with open('test.csv', 'r', encoding='UTF-8') as f: data_old = csv.reader(f, delimiter=",", lineterminator="\n") for row_old in data_old: old_file = {} old_file['first'] = row_old[0] old_file['second'] = row_old[1] line_to_write.append(old_file) # 写入TXT文件(按CSV格式输出) with open('test.txt', 'w', encoding='UTF-8') as g: writer = csv.writer(g, lineterminator="\n", quoting=csv.QUOTE_NONNUMERIC) for new_file in line_to_write: writer.writerow([new_file['first'], new_file['second']])
方案二:手动为指定字段添加引号
如果只需要给特定字段加引号,可以直接拼接带引号的字符串:
import csv line_to_write = [] # 读取CSV文件 with open('test.csv', 'r', encoding='UTF-8') as f: data_old = csv.reader(f, delimiter=",", lineterminator="\n") for row_old in data_old: old_file = {} old_file['first'] = row_old[0] old_file['second'] = row_old[1] line_to_write.append(old_file) # 写入TXT文件(按CSV格式输出) with open('test.txt', 'w', encoding='UTF-8') as g: writer = csv.writer(g, lineterminator="\n") for new_file in line_to_write: quoted_second = f'"{new_file["second"]}"' writer.writerow([new_file['first'], quoted_second])
两种方案都能输出你预期的结果:123,"123456789abc"
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

