使用Python批量转换5个CSV为TSV仅生成1个文件,求解决方法
问题分析与解决
你的代码里有两个核心问题,导致只生成了1个TSV文件:
问题1:提前终止程序的exit()语句
循环内部的exit()会在处理完第一个CSV文件后直接结束整个程序,后面的文件完全没机会被处理,必须删掉这个语句。
问题2:固定的输出文件名导致覆盖
你每次都写入同一个Exercise1.tsv文件,新的转换内容会直接覆盖之前的结果。正确的做法是根据原CSV文件的名称,生成对应的TSV文件(比如test.csv对应test.tsv)。
修改后的完整代码:
import csv import sys import os import pathlib print("Exercise1.csv", sys.argv[0]) dirname = pathlib.Path('/Users/Amber/Documents') # 遍历指定目录下的所有CSV文件 for file in dirname.rglob('*.csv'): # 生成对应的TSV文件名:替换后缀为.tsv tsv_filename = file.stem + '.tsv' # 让TSV文件和原CSV保存在同一目录 tsv_file_path = file.parent / tsv_filename with open(file, 'r') as csvin, open(tsv_file_path, 'w') as tsvout: csv_reader = csv.reader(csvin) tsv_writer = csv.writer(tsvout, delimiter='\t') for row in csv_reader: print(row) tsv_writer.writerow(row)
额外说明:
- 我把遍历路径改成了你定义的
dirname(/Users/Amber/Documents),这样更符合你原本想要处理指定目录下文件的意图,之前的pathlib.Path().rglob()是遍历当前工作目录,可能不是你需要的。 - 生成的TSV文件会和原CSV文件保存在同一个目录下,文件名保持一致仅后缀改为
.tsv,方便你对应查找转换后的文件。
内容的提问来源于stack exchange,提问作者amb
相关产品推荐
相关产品推荐

