以下python程序版本為Python3.13.0
1.請寫一個python程序,實現以下邏輯:從文件夾獲取所有文件名,與Excel中的fileName列進行對比,凡是不在該文件夾下的文件名,從Excel文檔中刪除后,并將Excel中fileName和fileLength數據保存至新的excel文檔
import os
import pandas as pddef 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_countcolumns_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}")# 保存到Exceldf_result.to_excel(output_path, index=False)print("操作完成!")return removed_countexcept Exception as e:print(f"發生錯誤: {str(e)}")return -1
?2.請寫一個python程序,實現以下邏輯:從文件夾獲取所有文件名,與Excel中的fileName列進行對比,凡是不在該Excel的文件名,將其從文件夾中刪除
import os
import pandas as pddef 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_filesif not files_to_delete:print("沒有需要刪除的文件")returnprint(f"找到 {len(files_to_delete)} 個需要刪除的文件")# 刪除文件deleted_count = 0for 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 += 1except Exception as e:print(f"刪除 {file} 時出錯: {str(e)}")print(f"刪除完成,共刪除了 {deleted_count} 個文件")except Exception as e:print(f"程序出錯: {str(e)}")