Python如何逐行编辑大文件并在每行处理后实时写入文件
Python逐行处理大文件列裁剪实现方案
原有代码问题根因
- 输出仅保留最后一行:循环内每次用
w(覆盖写)模式打开输出文件,每处理一行就清空之前写入的所有内容,仅保留最后一次写入结果 - 输出带列表括号:直接将列表对象
test[9:]拼接进字符串,默认调用列表的__str__方法,会自带括号、引号等格式字符 - write方法误用
sep参数:sep是print()函数的参数,file.write()方法不支持该参数,拼接内容时需手动统一用制表符连接
修正后可直接运行代码
# 替换为你的输入文件实际路径,不要用input作为变量名,避免和内置函数冲突 input_file_path = "your_input_file.vcf" output_file_path = "output.txt" # 外层一次性打开输出文件,用w模式初始化,循环内直接写入避免重复打开清空 with open(output_file_path, "w", encoding="utf-8") as out_f: # 逐行读取输入文件,不会加载整个文件到内存 with open(input_file_path, "r", encoding="utf-8") as in_f: for line in in_f: stripped_line = line.strip() # 跳过注释行的逻辑保留 if stripped_line.startswith("#"): continue # 按制表符拆分列 cols = stripped_line.split("\t") # 取第1、2列(索引0、1)+ 第10列及之后的所有列(索引9开始),全部用制表符连接 # 末尾加\n保证每行独立 processed_line = "\t".join([cols[0], cols[1]] + cols[9:]) + "\n" # 实时写入文件 out_f.write(processed_line)
实现特性说明
- 全程逐行读写,内存仅保留当前处理行的内容,完全适配超大文件场景
- 所有输出列统一用
\t连接,严格符合制表符分隔格式要求 - 保留了原需求跳过#开头注释行的逻辑
- 用上下文管理器管理文件句柄,避免资源泄漏问题
内容的提问来源于stack exchange,提问作者neuron
相关产品推荐
相关产品推荐

