如何将Python脚本处理结果保存至指定CSV文件?
解决CSV文件处理后无法保存的问题
我来帮你搞定这个问题,你的代码里有几个关键错误导致无法正常保存处理结果,咱们一步步梳理并修正:
问题分析
- 文件打开模式错误:你用
open(str(sys.argv[1]))打开文件时,默认是只读模式('r'),这种模式下根本无法写入内容。 - 错误调用方法:文件对象并没有
append()方法——append()是Python列表的专属方法,你把列表的方法用到了文件对象上,自然会报错。 - 读写冲突:在遍历读取文件的同时尝试修改同一个文件,会导致文件指针混乱,很容易出现数据丢失或异常。
解决方案
我们可以分成两步处理:先读取并处理所有行数据,再将处理后的内容写入目标文件(可以选择覆盖原文件,或者生成新文件保留原数据)。
方案1:覆盖原文件(直接更新输入的CSV)
import sys # 第一步:读取所有内容并处理 processed_content = [] # 用with语句自动管理文件,避免资源泄漏 with open(sys.argv[1], 'r') as input_file: for line in input_file: # 去除行尾换行符,追加指定内容 added_str = line.rstrip() + ',09,00,17' # 替换年份格式,把"20,"改成"2020," final_str = added_str.replace("20,", "2020,") # 把处理后的行加入列表,记得补回换行符 processed_content.append(final_str + '\n') # 第二步:将处理后的内容写入原文件 with open(sys.argv[1], 'w') as output_file: output_file.writelines(processed_content)
方案2:生成新文件(保留原CSV)
如果你不想覆盖原文件,可以把处理后的内容写入一个新文件,比如在原文件名后加_processed后缀:
import sys import os # 获取原文件路径和文件名 input_path = sys.argv[1] file_name, ext = os.path.splitext(input_path) output_path = f"{file_name}_processed{ext}" processed_content = [] with open(input_path, 'r') as input_file: for line in input_file: added_str = line.rstrip() + ',09,00,17' final_str = added_str.replace("20,", "2020,") processed_content.append(final_str + '\n') with open(output_path, 'w') as output_file: output_file.writelines(processed_content)
额外优化:拆分多日期行
如果你的CSV每行包含多个日期(比如3/4/20 3/5/20 3/6/20),想要把每个日期单独成行处理,可以这样修改:
import sys processed_content = [] with open(sys.argv[1], 'r') as input_file: for line in input_file: # 拆分每行的多个日期 dates = line.rstrip().split() for date in dates: # 处理单个日期 added_str = date + ',09,00,17' final_str = added_str.replace("20", "2020") processed_content.append(final_str + '\n') with open(sys.argv[1], 'w') as output_file: output_file.writelines(processed_content)
这样处理后,原来的一行多日期会变成每行一个处理后的条目:
3/4/2020,09,00,17 3/5/2020,09,00,17 3/6/2020,09,00,17
内容的提问来源于stack exchange,提问作者Jeremy Lin
相关产品推荐
相关产品推荐

