如何将Python extention_finder函数的后缀应用到压缩包过滤代码中
修改实现说明
你可以通过以下两种方式实现需求,优先推荐复用现有函数的方案:
方案1:复用已有的extention_finder函数
首先先修正原extention_finder函数的两处逻辑缺陷:一是函数没有添加return语句,调用后无法正常获取返回的后缀结果;二是zip后缀的判断条件使用了小写.zip,和其余后缀的大写判断逻辑不一致,会导致无法匹配大写格式的.ZIP后缀。修正后直接调用该函数判断当前文件是否为支持的格式即可,修改后的完整代码如下:
def extention_finder(file_path): if ".XLSX" in file_path.upper(): ext = ".xlsx" elif ".XLS" in file_path.upper(): ext = ".xls" elif ".TXT" in file_path.upper(): ext = ".txt" elif ".CSV" in file_path.upper(): ext = ".csv" elif ".XLT" in file_path.upper(): ext = ".xlt" elif ".ZIP" in file_path.upper(): # 修复原逻辑大小写不兼容的问题 ext = ".zip" else: ext = "N/A" return ext # 补上return语句才能正常获取返回值 counts = 1 myZip = zipfile.ZipFile(path_to_zip_file) print(myZip.namelist()) for file in myZip.filelist: # 替换原HERE行的逻辑,判断当前文件属于支持的后缀格式 if extention_finder(file.filename) != "N/A": if os.path.basename(file.filename) in os.listdir(directory_to_extract_to): source = myZip.open(file) target = open(os.path.join(directory_to_extract_to, os.path.basename(file.filename).split(".")[0] + "_" + str(counts) + "." + os.path.basename(file.filename).split(".")[1]), "wb") counts = counts + 1 # 可选优化:补充with逻辑关闭文件,避免资源泄露 with source, target: shutil.copyfileobj(source, target) else: source = myZip.open(file) target = open(os.path.join(directory_to_extract_to, os.path.basename(file.filename)), "wb") with source, target: shutil.copyfileobj(source, target)
方案2:直接匹配所有支持后缀(无需调用函数)
如果你不需要复用extention_finder函数,也可以直接把所有支持的后缀整理为元组,传入endswith方法实现匹配,同时做大小写兼容处理,仅需要替换HERE所在行即可:
# 仅替换原HERE所在行即可 if file.filename.lower().endswith(('.xlsx', '.xls', '.txt', '.csv', '.xlt', '.zip')):
内容的提问来源于stack exchange,提问作者Muratcan Çoban
相关产品推荐
相关产品推荐

