You need to enable JavaScript to run this app. Python批量删除CSV文件表头并替换分隔符为|的代码运行异常问题
优惠活动
大模型
产品
解决方案
定价
更多

Python批量删除CSV文件表头并替换分隔符为|的代码运行异常问题

原代码失效的核心原因
  • 同路径文件同时开启读写双模式是最大bug:当你在同一个上下文里同时对同一个文件用'r'读模式和'w'写模式打开时,'w'模式触发的瞬间就会把原文件内容全部截断清空,此时读流拿到的已经是空文件,后续的跳表头、替换分隔符操作根本没有可处理的内容。这种写法运行时通常会直接抛出StopIteration错误,就算没触发报错,写回去的内容也是空的,完全达不到处理效果。
  • 路径拼接逻辑不严谨:直接字符串拼接路径,Windows/macOS/Linux的路径分隔符不统一会导致找不到文件;也没有过滤目录下的子文件夹,遍历到目录对象时会触发读取报错。
  • 未指定文件编码,跨环境运行时容易出现中文乱码。
可直接实现需求的修正代码

代码逻辑调整为「先读入全部内存内容、完成处理后再写回文件」,彻底规避同时读写导致的文件清空问题,同时补上路径兼容、文件类型过滤的逻辑:

import os

def remove_header_replace_delimiter():
    # 替换为实际存放CSV文件的文件夹路径
    src_folder = r'你的CSV文件夹绝对路径'
    for file_name in os.listdir(src_folder):
        # 拼接跨平台兼容的完整文件路径
        full_file_path = os.path.join(src_folder, file_name)
        # 跳过子目录、非CSV格式的文件,避免报错
        if not os.path.isfile(full_file_path) or not file_name.lower().endswith('.csv'):
            continue

        # 第一步:读入原文件全部内容到内存
        with open(full_file_path, 'r', encoding='utf-8') as f:
            file_lines = f.readlines()
        
        # 第二步:处理内容——跳过第一行表头,剩余行把逗号替换为|
        processed_content = []
        # 切片取所有非表头行(跳过索引0的第一行)
        for line in file_lines[1:]:
            processed_content.append(line.replace(',', '|'))
        
        # 第三步:将处理后的内容写回原文件
        with open(full_file_path, 'w', encoding='utf-8') as f:
            f.writelines(processed_content)
        print(f'文件 {file_name} 处理完成')

if __name__ == '__main__':
    remove_header_replace_delimiter()
实用提醒
  • 运行脚本前务必备份原始CSV文件,脚本默认直接覆盖原文件,避免处理逻辑不符合预期造成数据丢失。
  • 如果你的CSV字段存在双引号包裹的内嵌逗号内容(比如员工姓名、备注字段里本身带逗号),全局字符串替换逗号的方式会把字段内部的逗号也替换成竖线,这种场景需要使用Python内置的csv模块做结构化解析后再导出,不能直接做字符串替换。
  • 若需要处理的单文件体积超过500MB,全量读入内存的方式会占用过高系统资源,可以改用临时文件方案:逐行读取原文件、把处理后的内容先写到同目录的临时文件里,全部处理完成后再用临时文件替换原文件,兼顾内存占用和读写安全。

内容的提问来源于stack exchange,提问作者user15227198

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 19:36:03