Python 批量合并csv文件
一、批量合并csv文件《方法1》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import pandas as pd import glob import os # 获取所有CSV文件的路径 file_paths = glob.glob( "C:\\Users\\Admin\\Desktop\\数据核对\\*.csv" ) # 使用glob.glob函数获取指定目录下所有以.csv为扩展名的文件路径,并将结果存储在file_paths列表中 print(file_paths) # 打印出这些文件路径供你检查 # 创建一个空的 DataFrame df = pd.DataFrame() # 创建一个空的DataFrame,用于存储合并后的数据 # 逐个读取每个CSV文件,并将其添加到DataFrame中 for file_path in file_paths: # 读取CSV文件并添加文件名为一列 temp_df = pd.read_csv(file_path, encoding= 'gbk' ) # 使用pd.read_csv函数读取CSV文件,encoding参数指定了文件的编码格式,这里使用GBK编码 file_name = os.path.basename(file_path) print(file_name) # 使用os.path.basename函数获取文件名(包含扩展名) temp_df[ 'file_name' ] = file_name # 将文件名作为新的一列添加到temp_df中 df = df.append(temp_df, ignore_index=True) # 使用df.append函数将temp_df合并到主DataFrame df中,ignore_index=True表示重新设置行索引 # 将DataFrame写入新的CSV文件中 df.to_csv( "C:\\Users\\Admin\\Desktop\\合并数据.csv" , index=False) # 使用df.to_csv函数将合并后的数据保存为新的CSV文件,index=False表示不保存行索引 |
二、批量合并csv文件 多文件编码格式《方法2》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import pandas as pd import glob import os # 使用glob.glob函数获取指定目录下所有以.csv为扩展名的文件路径,并将结果存储在file_paths列表中 file_paths = glob.glob( "C:\\Users\\Admin\\Desktop\\数据核对\\*.csv" ) # 创建一个空的DataFrame,用于存储合并后的数据 df = pd.DataFrame() # 循环遍历每个CSV文件,并将其添加到DataFrame中 for file_path in file_paths: # 尝试使用不同的编码格式读取CSV文件,直到成功为止 for encoding in [ 'utf-8' , 'gbk' , 'gb2312' , 'utf-16' , 'iso-8859-1' ]: try : # 使用pd.read_csv函数读取CSV文件,encoding参数指定了文件的编码格式 temp_df = pd.read_csv(file_path, encoding=encoding) break # 如果成功读取,则跳出循环 except UnicodeDecodeError: # 如果出现编码错误,则捕获该错误,并继续尝试下一个编码格式 continue else : # 如果没有任何编码格式成功读取CSV文件,则打印一条错误消息,并继续处理下一个文件 print(f "无法读取CSV文件:{file_path}" ) continue # 使用os.path.basename函数获取文件名(包含扩展名) file_name = os.path.basename(file_path) # 将文件名作为新的一列添加到DataFrame中 temp_df[ 'file_name' ] = file_name # 使用df.append函数将temp_df合并到主DataFrame df中,ignore_index=True表示重新设置行索引 df = df.append(temp_df, ignore_index=True) # 使用df.to_csv函数将合并后的数据保存为新的CSV文件,index=False表示不保存行索引 df.to_csv( "C:\\Users\\Admin\\Desktop\\合并数据.csv" , index=False) |
三、批量合并csv文件《方法3》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import os import pandas as pd # 指定包含CSV文件的文件夹路径 folder_path = "C:\\Users\\Admin\\Desktop\\数据核对" # 获取文件夹中的所有CSV文件 csv_files = [file for file in os.listdir(folder_path) if file.endswith( '.csv' )] print(csv_files) # 打印出找到的CSV文件列表 # 创建一个空的DataFrame来存储合并后的数据 merged_data = pd.DataFrame() # 遍历所有CSV文件并合并它们 for file in csv_files: file_path = os.path. join (folder_path, file) # 读取CSV文件,使用GBK编码(GBK是一种常见的中文字符编码) df = pd.read_csv(file_path, encoding= 'GBK' ) # 添加一个新的列,用于标识数据来自哪个CSV文件 df[ 'SourceFile' ] = file # 合并数据,将当前CSV文件的数据追加到已合并的数据中 merged_data = merged_data.append(df, ignore_index=True) # 将合并后的数据保存为一个新的CSV文件,指定index=False以避免保存索引列 merged_data.to_csv( "C:\\Users\\Admin\\Desktop\\合并数据.csv" , index=False) # 打印完成消息 print( 'CSV文件合并完成并保存为合并数据.csv' ) |
四、合并多种不同编码格式的csv文件
import os import pandas as pd import chardet def merge_csv_files(folder_path,output_path): # 获取文件夹中的所有CSV文件 csv_files = [file for file in os.listdir(folder_path) if file.endswith('.csv')] print(csv_files) # 创建一个空的DataFrame来存储合并后的数据 merged_data = pd.DataFrame() # 遍历所有CSV文件并合并它们 for file in csv_files: file_path = os.path.join(folder_path, file) # 使用 chardet.detect 函数检测文件编码格式 with open(file_path, 'rb') as f: result = chardet.detect(f.read()) encoding = result['encoding'] # 读取CSV文件,指定检测到的编码格式 df = pd.read_csv(file_path, encoding=encoding) if "YYFX_OrderList" in file_path: df.insert(12, 'NewColumnName', df.iloc[:, 11]) # 添加一个新的列,用于标识数据来自哪个CSV文件 df['SourceFile'] = file # 合并数据,将当前CSV文件的数据追加到已合并的数据中 merged_data = merged_data.append(df, ignore_index=True) # 将合并后的数据保存为一个新的CSV文件,指定index=False以避免保存索引列 merged_data.to_csv(output_path, index=False) print("已将所有CSV文件合并为一个文件:合并数据.csv") folder_path = "C:\\Users\\Admin\\Desktop\\数据核对" output_path = "C:\\Users\\Admin\\Desktop\\数据核对\\数据汇总.csv" merge_csv_files(folder_path,output_path)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!