Python 3.5实现多打印语句输出至CSV及自定义格式导出求助
搞定自定义格式导出的问题啦~
我看你现在的状况是:已经能在终端打出想要的自定义格式,但卡在了把这个格式内容写到文件里——当前代码只是把原CSV的行直接复制到新文件,不是你要的那个message:: { ... }结构对吧?
来,咱们一步步调整代码,分两种常见场景给你方案:
场景1:导出成和终端打印一样的自定义文本格式
如果你的目标是把那种带message:: { ... }的结构化文本存成文件,其实不用csv.writer,直接用文件的write()方法就行。记得把内容拼成字符串,加上换行符保持格式:
import csv with open('file.csv','r') as csv_file: csv_reader = csv.reader(csv_file) next(csv_reader) # 跳过表头行 sku_counter = 0 # 这里可以命名成txt更直观,要是坚持用csv后缀也没问题 with open('newfile.txt','w') as new_file: for row in csv_reader: sku_counter += 1 # 把你要的格式拼成完整字符串 output_content = f"message:: {{\n Message ID : {sku_counter}\n sku : {row}\n}}\n" # 写入文件 new_file.write(output_content) # 要是还想在终端看,就保留打印 print(output_content.strip())
跑起来之后,newfile.txt里的内容就和你终端打印的一模一样了。
场景2:导出成包含自增ID的新CSV文件
如果你其实是想把自增的Message ID和原CSV的两列数据合并成新的CSV(比如三列:ID、原列1、原列2),那调整csv_writer.writerow()的参数就行:
import csv with open('file.csv','r') as csv_file: csv_reader = csv.reader(csv_file) original_header = next(csv_reader) # 先拿原表头 sku_counter = 0 # 加newline=''是官方推荐的写法,避免CSV出现多余空行 with open('newfile.csv','w', newline='') as new_file: csv_writer = csv.writer(new_file) # 先写新表头,把Message ID加在最前面 csv_writer.writerow(["Message ID"] + original_header) for row in csv_reader: sku_counter += 1 # 把自增ID和原行数据拼起来写入 csv_writer.writerow([sku_counter] + row) # 终端打印的部分保留不变 print("message:: {") print(" Message ID :",sku_counter) print(" sku :", row)
这样生成的新CSV就完全符合规范,包含你需要的自增ID列啦。
小补充
要是你想要的自定义格式是更规范的结构化数据(比如JSON),可以试试Python的json模块来序列化,格式会更严谨;另外处理CSV时记得用newline='',能避免很多换行相关的小坑~
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

