如何使用Python实现CSV文件的行交换与列删除操作
解决CSV批量处理的行交换与列筛选问题
我来帮你搞定这11000个CSV文件的批量处理问题!先理清你的需求:每个输入CSV的行结构是,,A01.0 Брюшной тиф 0,"Тиф брюшной, Паратиф, Тиф, Паратифозная лихорадка",你需要把它转换成"Тиф брюшной, Паратиф, Тиф, Паратифозная лихорадка",A01.0 Брюшной тиф——也就是提取第四列作为第一个字段,提取第三列并去掉末尾的" 0"作为第二个字段,还要批量处理所有文件并合并到输出文件里。
现有代码的问题
你当前的代码只读取了单个文件,而且错误地取了data[1][0]和data[0][1],这明显不符合你的输入结构(你的输入是单一行,有4列),所以输出才会不对。
修改后的完整代码
下面是能批量处理所有文件并得到你期望结果的代码,我会逐行解释:
import csv import os # 配置你的输入目录和输出文件路径 input_directory = '/Users/gfidarov/Desktop/Python/CSV/synonims copy/' output_csv_path = '/Users/gfidarov/Desktop/Python/CSV/merged/syn.csv' # 打开输出文件,准备写入所有处理后的行 with open(output_csv_path, 'w', newline='') as output_file: csv_writer = csv.writer(output_file) # 遍历输入目录下的所有CSV文件 for file_name in os.listdir(input_directory): # 只处理后缀为.csv的文件 if file_name.lower().endswith('.csv'): file_full_path = os.path.join(input_directory, file_name) # 读取单个CSV文件 with open(file_full_path, 'r') as input_file: csv_reader = csv.reader(input_file) # 处理文件中的每一行(即使有些文件有多行也能兼容) for row in csv_reader: # 先确保这一行有足够的列,避免索引错误 if len(row) >= 4: # 提取第四列(索引3),这是我们要的第一个字段 synonym_text = row[3] # 提取第三列(索引2),去掉末尾的" 0" code_with_name = row[2].rstrip(' 0') # 按期望的顺序写入:先同义词,再处理后的编码名称 csv_writer.writerow([synonym_text, code_with_name])
代码关键要点
- 批量遍历:用
os.listdir遍历输入目录下所有文件,通过endswith('.csv')筛选出CSV文件,确保处理所有11000个文件。 - 列提取与处理:
- 第四列(索引3)直接作为第一个输出字段,因为它就是你要的同义词文本。
- 第三列(索引2)用
rstrip(' 0')去掉末尾的空格和0,得到干净的A01.0 Брюшной тиф;如果末尾的" 0"是固定长度,你也可以用row[2][:-2]来精确截取,效果一样。
- 容错处理:加入
len(row) >=4的判断,避免某些格式异常的文件导致程序崩溃。 - 合并输出:所有处理后的行都会写入同一个输出文件,符合你现有代码的合并需求。
测试验证
你可以先拿一两个测试文件跑一下这个代码,看看输出是否符合你的期望:"Тиф брюшной, Паратиф, Тиф, Паратифозная лихорадка",A01.0 Брюшной тиф,没问题再批量处理所有文件。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

