【Python】使用Python合并多个CSV文件
- 游戏开发
- 2025-09-22 08:21:01

文章目录 引言问题描述解决方案代码实现与解析完整代码关键代码解析1. 跳过标题行的逻辑2. 命令行参数设计 参数详解:`-`的作用与区别1. 位置参数(无`-`前缀)2. 可选参数(有`-`前缀)加 `-` 与不加 `-` 的区别总结 示例场景场景1:默认合并(跳过其他标题行)场景2:保留所有标题行场景3:处理空文件 引言
在数据处理过程中,经常需要将多个CSV文件合并为一个文件。例如,当数据分散在多个文件中,且每个文件的结构相同时,合并可以简化后续分析。然而,合并时需注意如何处理各文件的标题行(即首行),避免重复的标题行干扰数据。
问题描述 合并多个CSV文件,上下堆叠(垂直合并)。合并时,仅保留第一个文件的标题行,其他文件的标题行需跳过。提供选项允许用户选择保留所有文件的标题行(例如调试或保留原始结构)。
示例文件:
A.csv(首行为标题):name,age Alice,30 Bob,25 B.csv(首行为标题):name,age Charlie,35 David,40期望合并结果(默认跳过其他文件的标题行):
name,age Alice,30 Bob,25 Charlie,35 David,40解决方案
我们通过Python的csv和argparse模块实现以下功能:
读取多个CSV文件。根据用户参数决定是否跳过其他文件的标题行。将内容合并到指定输出文件。代码实现与解析 完整代码 import argparse import csv def merge_csv(input_files, output_file, include_all_headers): """ 合并多个CSV文件,可选择是否保留所有文件的标题行。 :param input_files: 输入文件路径列表 :param output_file: 输出文件路径 :param include_all_headers: 是否保留所有标题行 """ with open(output_file, 'w', newline='', encoding='utf-8') as outfile: writer = csv.writer(outfile) for i, file in enumerate(input_files): with open(file, 'r', newline='', encoding='utf-8') as infile: reader = csv.reader(infile) # 处理第一个文件:保留所有行 if i == 0: for row in reader: writer.writerow(row) # 处理其他文件:根据参数跳过标题行 else: if not include_all_headers: try: next(reader) # 跳过首行 except StopIteration: pass # 处理空文件 for row in reader: writer.writerow(row) def main(): parser = argparse.ArgumentParser(description='合并CSV文件,灵活处理标题行') parser.add_argument('files', nargs='+', help='输入CSV文件路径列表') parser.add_argument('-o', '--output', required=True, help='输出文件路径') parser.add_argument('--include-all-headers', action='store_true', help='保留所有文件的标题行(默认仅保留第一个文件的标题行)') args = parser.parse_args() merge_csv(args.files, args.output, args.include_all_headers) if __name__ == '__main__': main()
关键代码解析 1. 跳过标题行的逻辑 if not include_all_headers: try: next(reader) # 跳过首行 except StopIteration: pass # 处理空文件 功能:如果用户选择不保留所有标题行(include_all_headers=False),则跳过非首文件的标题行。实现: next(reader):读取并丢弃一行(标题行)。try-except:处理空文件。若文件为空,next(reader)会抛出StopIteration异常,此处直接忽略。 2. 命令行参数设计 parser.add_argument('files', nargs='+', help='输入CSV文件路径列表') parser.add_argument('-o', '--output', required=True, help='输出文件路径') parser.add_argument('--include-all-headers', action='store_true', help='保留所有标题行') 参数类型: 位置参数(files):必须按顺序提供,不可省略。可选参数(-o和--include-all-headers):通过-或--指定,顺序可调整。 作用: files:待合并的CSV文件列表。-o:指定输出文件路径(必填)。--include-all-headers:保留所有标题行(默认不保留)。
参数详解:-的作用与区别
在命令行中,参数分为两种类型:
1. 位置参数(无-前缀) 定义:必须按顺序提供,不可省略。示例:python merge_csv.py file1.csv file2.csv -o merged.csv file1.csv和file2.csv是位置参数,对应代码中的files。 2. 可选参数(有-前缀) 定义:以-(短选项)或--(长选项)开头,顺序可调整。示例:python merge_csv.py file1.csv file2.csv --include-all-headers -o merged.csv -o和--include-all-headers是可选参数。 加 - 与不加 - 的区别总结 特性不加 -(位置参数)加 -(可选参数)前缀无-(短选项)或 --(长选项)顺序必须按定义顺序提供可以放在任意位置是否必须必须提供可选(除非设置 required=True)典型用途输入文件路径等必须参数输出文件路径、配置选项等示例场景 场景1:默认合并(跳过其他标题行)
命令:
python merge_csv.py A.csv B.csv -o merged.csv输出文件内容:
name,age Alice,30 Bob,25 Charlie,35 David,40 场景2:保留所有标题行命令:
python merge_csv.py A.csv B.csv -o merged.csv --include-all-headers输出文件内容:
name,age Alice,30 Bob,25 name,age # B.csv的标题行被保留 Charlie,35 David,40 场景3:处理空文件若B.csv为空文件:
python merge_csv.py A.csv B.csv -o merged.csv输出文件内容:
name,age Alice,30 Bob,25 # B.csv的内容为空,无数据写入【Python】使用Python合并多个CSV文件由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Python】使用Python合并多个CSV文件”