如何修改Python CSV合并代码以读取所有文件的全部行?
解决CSV合并时跳过非首文件首行的问题
嘿,这个问题很好解决~你现在的代码里,if i != 0:的判断逻辑会让你处理第二个及以后的CSV文件时,自动跳过它们的第一行。要读取所有文件的全部行,只需要把这个跳过首行的逻辑删掉就行。我给你两种修改方案,看你更倾向哪种:
方案一:使用Pandas批量合并(最省心)
既然你已经导入了pandas,用这个方法可以一键搞定所有合并逻辑,还能自动处理列对齐:
#!/usr/bin/env python import pandas as pd import glob # 目标文件夹路径 path = r'/Users/sonia/Animalsmanage/output' # 获取文件夹下所有CSV文件的路径 all_csv_files = glob.glob(f"{path}/*.csv") # 批量读取所有CSV文件,合并成一个DataFrame merged_df = pd.concat([pd.read_csv(file) for file in all_csv_files], ignore_index=True) # 保存合并后的最终文件,index=False表示不生成额外的行索引 merged_df.to_csv('finaloutput.csv', index=False)
说明:这个方法会完整读取每个CSV的所有行,不管文件有没有表头。如果所有文件的表头一致,会自动对齐列;如果表头不同,也会保留所有列,不会丢失任何数据。
方案二:修改原生文件读写逻辑
如果你想保留原来的逐行读写方式,只需要去掉跳过首行的判断即可:
#!/usr/bin/env python import glob, os import csv path = r'/Users/sonia/Animalsmanage/output' allFiles = glob.glob(path + "/*.csv") with open('finaloutput.csv', 'w', newline='', encoding='utf-8') as outfile: writer = csv.writer(outfile) i = 0 for filename in allFiles: with open(filename, 'r', encoding='utf-8') as infile: reader = csv.reader(infile) # 删掉原来的if i !=0: 跳过首行的逻辑,直接写入所有行 for row in reader: writer.writerow(row) i += 1
说明:移除了导致跳过非首文件首行的判断后,每个CSV文件的每一行都会被完整写入到最终文件中。
内容的提问来源于stack exchange,提问作者Soniasalme
相关产品推荐
相关产品推荐

