You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历字典中的浮点型值?实现文件重命名与存在性检查

基于字典键重命名文件并检查文件存在性的解决方案

先帮你修正代码里的几个小问题,再给出完整的实现逻辑:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:35:36