You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python批量修改CSV文件分隔符并输出至新文件夹求助

解决Python批量转换CSV文件为制表符分隔格式的问题

嘿,别担心!刚接触Python时遇到批量文件处理的卡点太正常了,我来一步步帮你搞定这个需求——把文件夹里的所有CSV文件转成制表符(Tab)分隔的格式,输出到新文件夹里。

方法一:用Python标准库csv和os(无需额外安装)

这是最基础的方法,不用装第三方库,适合新手理解底层逻辑:

import os
import csv

# 请替换成你的实际路径
source_folder = "./original_csvs"  # 存放原始CSV的文件夹
target_folder = "./tab_separated_files"  # 输出转换后文件的新文件夹

# 确保目标文件夹存在,不存在就创建
os.makedirs(target_folder, exist_ok=True)

# 遍历源文件夹里的所有文件
for filename in os.listdir(source_folder):
    # 只处理后缀为.csv的文件(兼容大写.CSV的情况)
    if filename.lower().endswith(".csv"):
        # 构建原文件和目标文件的完整路径
        source_file = os.path.join(source_folder, filename)
        # 可以把目标文件后缀改成.tsv(制表符分隔文件的标准后缀),也可以保留.csv
        target_file = os.path.join(target_folder, filename.replace(".csv", ".tsv"))
        
        # 打开原文件并写入新文件
        with open(source_file, "r", newline="", encoding="utf-8") as infile, \
             open(target_file, "w", newline="", encoding="utf-8") as outfile:
            # 注意:如果你的原始CSV不是逗号分隔,把delimiter改成实际的分隔符(比如";")
            csv_reader = csv.reader(infile, delimiter=",")
            tab_writer = csv.writer(outfile, delimiter="\t")
            
            # 逐行读取并写入
            for row in csv_reader:
                tab_writer.writerow(row)
        
        print(f✅ 已完成:{filename}")

print("\n🎉 所有文件处理完毕!")

关键细节说明:

  • os.makedirs(..., exist_ok=True):避免因为目标文件夹已存在而报错
  • filename.lower().endswith(".csv"):兼容文件名是大写.CSV的情况
  • 编码参数encoding="utf-8":如果你的文件有中文或特殊字符,避免乱码;如果utf-8不行,可以试试gbk或utf-8-sig
  • 分隔符设置:如果你的原始CSV是分号、空格等其他分隔符,一定要修改csv.reader里的delimiter参数

方法二:用pandas(代码更简洁,适合复杂场景)

如果你需要处理的CSV有复杂结构(比如带表头、多数据类型),用pandas会更省心,不过需要先安装:

pip install pandas

代码示例:

import os
import pandas as pd

source_folder = "./original_csvs"
target_folder = "./tab_separated_files"

os.makedirs(target_folder, exist_ok=True)

for filename in os.listdir(source_folder):
    if filename.lower().endswith(".csv"):
        source_file = os.path.join(source_folder, filename)
        target_file = os.path.join(target_folder, filename.replace(".csv", ".tsv"))
        
        # 读取CSV,同样可以指定sep参数设置原分隔符(比如sep=";")
        df = pd.read_csv(source_file)
        # 写入制表符分隔文件,index=False避免写入多余的索引列
        df.to_csv(target_file, sep="\t", index=False, encoding="utf-8")
        
        print(f✅ 已完成:{filename}")

print("\n🎉 所有文件处理完毕!")

进阶:处理子文件夹里的CSV

如果你的原始文件夹还有子文件夹,需要递归处理所有CSV,可以用os.walk:

import os
import csv

source_folder = "./original_csvs"
target_folder = "./tab_separated_files"

os.makedirs(target_folder, exist_ok=True)

# 遍历所有子文件夹
for root, _, files in os.walk(source_folder):
    for filename in files:
        if filename.lower().endswith(".csv"):
            source_file = os.path.join(root, filename)
            # 保留原文件夹结构,创建对应的子文件夹
            relative_path = os.path.relpath(source_file, source_folder)
            target_file = os.path.join(target_folder, relative_path).replace(".csv", ".tsv")
            os.makedirs(os.path.dirname(target_file), exist_ok=True)
            
            # 读取写入逻辑和方法一一致
            with open(source_file, "r", newline="", encoding="utf-8") as infile, \
                 open(target_file, "w", newline="", encoding="utf-8") as outfile:
                csv_reader = csv.reader(infile, delimiter=",")
                tab_writer = csv.writer(outfile, delimiter="\t")
                for row in csv_reader:
                    tab_writer.writerow(row)
            
            print(f✅ 已完成:{os.path.join(root, filename)}")

print("\n🎉 所有文件处理完毕!")

如果运行时遇到报错(比如找不到文件、编码错误),可以看看具体的错误提示,调整路径、编码或者分隔符参数就好啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:58:10