如何使用python对比2个文件夹中所有表格名称的差异,需要对比的文件夹会嵌套多个文件夹,帮我整理为完整代码
时间: 2024-12-18 13:17:17 浏览: 4
批量创建文件代码/批量创建文件夹程序/批量创建嵌套的文件夹
5星 · 资源好评率100%
在Python中,你可以使用`os`, `glob`, 和 `pandas`库来比较两个嵌套文件夹中的Excel表格(`.xlsx` 或 `.xls`)文件名。这里是一个基本的脚本示例,它会递归遍历文件夹并找出表单标题(假设为第一行数据的列标题)之间的差异:
```python
import os
import glob
import pandas as pd
# 定义两个要比较的文件夹路径
folder1 = 'path_to_folder1'
folder2 = 'path_to_folder2'
def compare_excel_files(folder1, folder2):
# 获取第一个文件夹中的所有Excel文件
files1 = glob.glob(os.path.join(folder1, '**/*.xls*'), recursive=True)
# 检查第二个文件夹是否为空,防止后续异常
if not files2 := glob.glob(os.path.join(folder2, '**/*.xls*'), recursive=True):
print(f"Folder {folder2} is empty.")
return
# 创建一个字典存储每个文件的数据框
dfs = {}
for file in files1:
name = os.path.basename(file).split('.')[0] # 获取文件名,去掉扩展名
dfs[name] = pd.read_excel(file, header=0) # 使用pandas读取文件,假设第一行是表头
# 对比两个文件夹中的文件
diff_files = set(dfs.keys()) ^ set(files2) # 使用集合差集找出新加入或删除的文件
# 对于存在的文件,检查标题差异
for file_name in diff_files:
df1 = dfs[file_name]
df2_path = os.path.join(folder2, f'{file_name}.xlsx') # 假设文件名一样,只改文件夹
try:
df2 = pd.read_excel(df2_path, header=0)
# 比较两份文件的第一行(即标题)
if not df1.columns.equals(df2.columns): # 如果列名不同
print(f"Different column headers in {file_name}:")
print("df1:", df1.columns.tolist())
print("df2:", df2.columns.tolist())
except FileNotFoundError:
print(f"{file_name} exists only in {folder1}")
# 调用函数开始比较
compare_excel_files(folder1, folder2)
```
阅读全文