一、批量合并csv文件《方法1》
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》
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》
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)