文件分类器代码在extension长度为1时冻结,求解决方案
文件分类器遇到扩展名长度为1时程序冻结的解决办法
你的代码在处理无扩展名(extension长度为1)的文件时会进入死循环,导致程序完全冻结。问题出在这两个地方:
else分支里的path[+1]完全是无效代码,根本不会推进循环- 当
len(extension)≠2时,外层的while b < len(k)循环里b的值始终没有递增,永远满足循环条件,程序卡死
要实现「跳过这类文件继续处理其他文件」的需求,直接在判断到extension长度不为2时,跳过当前文件的后续逻辑即可。同时可以优化代码结构,减少冗余操作:
修改后的代码
import os foldername = input("name of folder: ") path = os.listdir(foldername) # 只读取一次扩展名文件,避免重复IO操作 with open("C:/Users/flori/OneDrive/Dokumente/code/extesions.txt", "r") as f: # 处理每行内容,去掉换行符后存为列表 registered_extensions = [line.strip() for line in f.readlines()] # 用for循环遍历文件列表,无需手动维护计数变量 for filename in path: extension = filename.split(".") print(f"当前文件: {filename},扩展名拆分结果: {extension}") # 直接跳过无扩展名或格式异常的文件 if len(extension) != 2: print("跳过该文件") continue # 检查扩展名是否匹配 file_ext = extension[1] if file_ext in registered_extensions: print(f"匹配到注册扩展名: {file_ext}") # 这里可以添加移动/分类文件的逻辑 else: print(f"未匹配到注册扩展名: {file_ext}")
关键修改点
- 用
for循环遍历文件列表,替代手动维护n变量的while循环,减少出错概率 - 仅读取一次扩展名文件并处理为列表,避免重复打开文件的冗余操作
- 遇到
extension长度不为2的文件时,用continue直接跳过后续逻辑,彻底避免死循环 - 简化扩展名匹配逻辑,用
in操作符替代嵌套循环,代码更清晰易读
内容的提问来源于stack exchange,提问作者florian van maasakker
相关产品推荐
相关产品推荐

