如何遍历字典中的浮点型值?实现文件重命名与存在性检查
基于字典键重命名文件并检查文件存在性的解决方案
先帮你修正代码里的几个小问题,再给出完整的实现逻辑:
1. 先解决路径的坑
你原来的路径写法有两处容易出错的地方:
- Windows路径里的
\是转义字符,直接写"C:\Desktop\phototest"会导致\D、\p被当成特殊转义序列,要么用原始字符串r"C:\Desktop\phototest",要么把反斜杠改成双反斜杠"C:\\Desktop\\phototest"。 glob.glob("C:\Desktop\phototest*.jpg")漏了一个反斜杠,应该是C:\Desktop\phototest\*.jpg,不然会匹配名字以phototest开头的jpg文件,而非目标目录下的所有jpg。更规范的做法是用os.path.join拼接路径,跨平台更友好。
2. 完整实现代码
假设你的字典结构是键为浮点型(用作新文件名),值为原文件名(或包含文件名的元组),以下是适配你需求的完整代码:
import os import glob # 定义目标目录,用原始字符串避免转义问题 photo_dir = r"C:\Desktop\phototest" # 获取目录下所有jpg文件,用os.path.join拼接路径更安全 photo_paths = glob.glob(os.path.join(photo_dir, "*.jpg")) # 提取所有存在的文件名(不带路径),存到集合里实现快速存在性检查 existing_files = {os.path.basename(path) for path in photo_paths} # 示例字典,根据你的实际结构调整 # 如果你的值是元组(比如(20026308, u'1224.jpg')),代码里会自动处理 file_rename_map = { 20026308.0: "1224.jpg", 20026309.0: "1225.jpg", # 支持元组形式的值: # 20026310.0: (20026310, u'1226.jpg'), } # 遍历字典处理每个文件 for new_key, original_file in file_rename_map.items(): # 如果值是元组,提取其中的文件名部分(这里假设取第二个元素) if isinstance(original_file, tuple): original_file = original_file[1] # 确保文件名带.jpg后缀(如果你的值里没带的话) if not original_file.endswith(".jpg"): original_file += ".jpg" # 检查文件是否存在 if original_file in existing_files: # 把浮点型的键转成合适的文件名: # 方案1:直接转字符串,比如20026308.0 → "20026308.0.jpg" # new_filename = f"{new_key}.jpg" # 方案2:如果键是整数型浮点,转成整数避免.0后缀 new_filename = f"{int(new_key)}.jpg" # 构建完整的原文件和新文件路径 old_full_path = os.path.join(photo_dir, original_file) new_full_path = os.path.join(photo_dir, new_filename) # 执行重命名,加异常处理避免程序崩溃 try: os.rename(old_full_path, new_full_path) print(f"✅ 成功重命名:{original_file} → {new_filename}") except Exception as e: print(f"❌ 重命名失败 {original_file}:{str(e)}") else: print(f"⚠️ 文件不存在:{original_file}")
3. 关键细节说明
- 集合快速检查:把存在的文件名存到集合里,检查存在性的速度比遍历列表快很多,尤其是文件数量较多时。
- 浮点型键处理:如果你的键是整数形式的浮点数(比如
20026308.0),用int(new_key)转成整数再生成文件名,避免出现20026308.0.jpg这种不太美观的文件名。 - 异常处理:重命名时可能遇到文件被占用、权限不足等问题,用
try-except捕获异常,程序不会直接崩溃,还能输出错误原因。 - 路径兼容性:用
os.path.join拼接路径,不管是Windows还是Linux系统都能正常工作,不用手动处理路径分隔符。
内容的提问来源于stack exchange,提问作者polecat
相关产品推荐
相关产品推荐

