以下python程序版本为python3.13.0
1.请写一个python程序,实现以下逻辑:从文件夹获取所有文件名,与excel中的filename列进行对比,凡是不在该文件夹下的文件名,从excel文档中删除后,并将excel中filename和filelength数据保存至新的excel文档
import os
import pandas as pd
def filter_excel_by_folder(folder_path, excel_path, output_path=none, sheet_name=0, column_name='filename'):
"""
过滤excel文件,仅保留文件夹中存在的文件名对应的行
参数:
folder_path (str): 要检查的文件夹路径
excel_path (str): 需要过滤的excel文件路径
output_path (str, 可选): 输出excel文件路径,默认为none(覆盖原文件)
sheet_name (str/int, 可选): 工作表名称或索引,默认为第一个工作表
column_name (str, 可选): 包含文件名的列名,默认为'filename'
"""
try:
# 获取文件夹中的所有文件名(包括扩展名)
folder_files = set(os.listdir(folder_path))
print(f"在文件夹中找到 {len(folder_files)} 个文件")
# 读取excel文件
df = pd.read_excel(excel_path, sheet_name=sheet_name)
original_count = len(df)
print(f"excel中原有 {original_count} 行数据")
# 检查文件名列是否存在
if column_name not in df.columns:
raise valueerror(f"excel中找不到列 '{column_name}'")
# 过滤数据:仅保留文件夹中存在的文件名
filtered_df = df[df[column_name].isin(folder_files)]
new_count = len(filtered_df)
removed_count = original_count - new_count
columns_to_save = ['filename', 'filelength']
# 保存需要的列
df_result = filtered_df[columns_to_save]
print(f"删除了 {removed_count} 行不存在于文件夹中的数据")
print(f"保留 {new_count} 行数据")
# 保存结果
if output_path is none:
output_path = excel_path # 覆盖原文件
print("将覆盖原始excel文件")
else:
print(f"将保存到新文件: {output_path}")
# 保存到excel
df_result.to_excel(output_path, index=false)
print("操作完成!")
return removed_count
except exception as e:
print(f"发生错误: {str(e)}")
return -12.请写一个python程序,实现以下逻辑:从文件夹获取所有文件名,与excel中的filename列进行对比,凡是不在该excel的文件名,将其从文件夹中删除
import os
import pandas as pd
def delete_unmatched_files(excel_path='', folder_path='', sheet_name=2, column_name='path'):
"""
根据excel中的文件名删除文件夹中不匹配的文件
参数:
excel_path (str): excel文件路径
folder_path (str): 要清理的文件夹路径
sheet_name (str/int): excel工作表名或索引,默认为第一个工作表
column_name (str): 包含文件名的列名,默认为'文件名'
"""
try:
# 从excel读取文件名列表
df = pd.read_excel(excel_path, sheet_name=sheet_name)
excel_files = set(df[column_name].dropna().astype(str).tolist())
print(f"excel中找到 {len(excel_files)} 个文件名")
# 获取文件夹中的所有文件
folder_files = set(os.listdir(folder_path))
print(f"文件夹中找到 {len(folder_files)} 个文件")
# 找出需要删除的文件(在文件夹中但不在excel中的文件)
files_to_delete = folder_files - excel_files
if not files_to_delete:
print("没有需要删除的文件")
return
print(f"找到 {len(files_to_delete)} 个需要删除的文件")
# 删除文件
deleted_count = 0
for file in files_to_delete:
file_path = os.path.join(folder_path, file)
try:
if os.path.isfile(file_path):
os.remove(file_path)
print(f"已删除: {file}")
deleted_count += 1
except exception as e:
print(f"删除 {file} 时出错: {str(e)}")
print(f"删除完成,共删除了 {deleted_count} 个文件")
except exception as e:
print(f"程序出错: {str(e)}")知识扩展
python 获取当前文件夹所有文件名并写入到excel文件中
在工作中,有时候,我们需要整理文件夹中的所有文件名称,并罗列在一张表格中。天哪,我的文件夹中有上千个文件,要一个个的复制粘贴吗?太麻烦了吧?今天,我们用python来解决这个问题。
1. 使用方法:
将下面这段python代码文件复制到需要整理文件名的文件夹下,然后运行下代码,最后在删除这段代码的文件名就可以了(将代码放到文件下主要是不用输入文件夹目录路径,但代码的文件名也会被抓取)。
# coding=utf-8
import os
import xlwt #操作excel模块
import sys
file_path = sys.path[0]+'\\filenamelist.xls'#sys.path[0]为要获取当前路径,filenamelist为要写入的文件
f = xlwt.workbook(encoding='utf-8', style_compression=0) #新建一个excel
sheet = f.add_sheet('sheet1') #新建一个sheet
pathdir = os.listdir(sys.path[0])#文件放置在当前文件夹中,用来获取当前文件夹内所有文件目录
i = 0 #将文件列表写入test.xls
for s in pathdir:
sheet.write(i, 0, s) #参数i,0,s分别代表行,列,写入值
i = i+1
print(file_path)
print(i) #显示文件名数量
f.save(file_path)实现效果
当前文件夹下面文件列表如下图,现在要获取所有文件名列表并写入到filenamelist.xls文件中。


到此这篇关于python实现文件夹中文件名对比的文章就介绍到这了,更多相关python文件名对比内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论