Python實現(xiàn)文件夾中文件名對比
以下python程序版本為Python3.13.0
1.請寫一個python程序,實現(xiàn)以下邏輯:從文件夾獲取所有文件名,與Excel中的fileName列進(jìn)行對比,凡是不在該文件夾下的文件名,從Excel文檔中刪除后,并將Excel中fileName和fileLength數(shù)據(jù)保存至新的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文件,僅保留文件夾中存在的文件名對應(yīng)的行
參數(shù):
folder_path (str): 要檢查的文件夾路徑
excel_path (str): 需要過濾的Excel文件路徑
output_path (str, 可選): 輸出Excel文件路徑,默認(rèn)為None(覆蓋原文件)
sheet_name (str/int, 可選): 工作表名稱或索引,默認(rèn)為第一個工作表
column_name (str, 可選): 包含文件名的列名,默認(rèn)為'fileName'
"""
try:
# 獲取文件夾中的所有文件名(包括擴(kuò)展名)
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} 行數(shù)據(jù)")
# 檢查文件名列是否存在
if column_name not in df.columns:
raise ValueError(f"Excel中找不到列 '{column_name}'")
# 過濾數(shù)據(jù):僅保留文件夾中存在的文件名
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} 行不存在于文件夾中的數(shù)據(jù)")
print(f"保留 {new_count} 行數(shù)據(jù)")
# 保存結(jié)果
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"發(fā)生錯誤: {str(e)}")
return -12.請寫一個python程序,實現(xiàn)以下邏輯:從文件夾獲取所有文件名,與Excel中的fileName列進(jìn)行對比,凡是不在該Excel的文件名,將其從文件夾中刪除
import os
import pandas as pd
def delete_unmatched_files(excel_path='', folder_path='', sheet_name=2, column_name='path'):
"""
根據(jù)Excel中的文件名刪除文件夾中不匹配的文件
參數(shù):
excel_path (str): Excel文件路徑
folder_path (str): 要清理的文件夾路徑
sheet_name (str/int): Excel工作表名或索引,默認(rèn)為第一個工作表
column_name (str): 包含文件名的列名,默認(rèn)為'文件名'
"""
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)}")知識擴(kuò)展
Python 獲取當(dāng)前文件夾所有文件名并寫入到excel文件中
在工作中,有時候,我們需要整理文件夾中的所有文件名稱,并羅列在一張表格中。天哪,我的文件夾中有上千個文件,要一個個的復(fù)制粘貼嗎?太麻煩了吧?今天,我們用Python來解決這個問題。
1. 使用方法:
將下面這段Python代碼文件復(fù)制到需要整理文件名的文件夾下,然后運(yùn)行下代碼,最后在刪除這段代碼的文件名就可以了(將代碼放到文件下主要是不用輸入文件夾目錄路徑,但代碼的文件名也會被抓?。?/p>
# coding=utf-8
import os
import xlwt #操作excel模塊
import sys
file_path = sys.path[0]+'\\filenamelist.xls'#sys.path[0]為要獲取當(dāng)前路徑,filenamelist為要寫入的文件
f = xlwt.Workbook(encoding='utf-8', style_compression=0) #新建一個excel
sheet = f.add_sheet('sheet1') #新建一個sheet
pathDir = os.listdir(sys.path[0])#文件放置在當(dāng)前文件夾中,用來獲取當(dāng)前文件夾內(nèi)所有文件目錄
i = 0 #將文件列表寫入test.xls
for s in pathDir:
sheet.write(i, 0, s) #參數(shù)i,0,s分別代表行,列,寫入值
i = i+1
print(file_path)
print(i) #顯示文件名數(shù)量
f.save(file_path)實現(xiàn)效果
當(dāng)前文件夾下面文件列表如下圖,現(xiàn)在要獲取所有文件名列表并寫入到filenamelist.xls文件中。


到此這篇關(guān)于Python實現(xiàn)文件夾中文件名對比的文章就介紹到這了,更多相關(guān)Python文件名對比內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python實現(xiàn)船舶的MMSI的獲取(推薦)
工作中遇到一個需求,需要通過網(wǎng)站查詢船舶名稱得到MMSI碼,網(wǎng)站來自船訊網(wǎng)。這篇文章主要介紹了基于Python實現(xiàn)船舶的MMSI的獲取,需要的朋友可以參考下2019-10-10
python3.5+tesseract+adb實現(xiàn)西瓜視頻或頭腦王者輔助答題
這篇文章主要介紹了python3.5+tesseract+adb實現(xiàn)西瓜視頻或頭腦王者輔助答題,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
python中的匿名函數(shù)及編寫無參數(shù)decorator詳解
這篇文章主要介紹了python中的匿名函數(shù)及編寫無參數(shù)decorator詳解,高階函數(shù)可以接收函數(shù)做參數(shù),有些時候,我們不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便,需要的朋友可以參考下2023-12-12
Python中accelo包語法、參數(shù)和實際應(yīng)用案例總結(jié)
Accelo是Python與專業(yè)服務(wù)自動化平臺交互的庫,支持API認(rèn)證、數(shù)據(jù)增刪改查及批量操作,這篇文章主要介紹了Python中accelo包語法、參數(shù)和實際應(yīng)用案例的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-09-09
Django執(zhí)行python?manage.py?makemigrations報錯的解決方案分享
相信用過很多Django makemigrations的人都會遇到過makemigrations時會發(fā)生報錯,下面這篇文章主要給大家介紹了關(guān)于Django執(zhí)行python?manage.py?makemigrations報錯的解決方案,需要的朋友可以參考下2022-09-09

