修改文件名为什么没有生效?

想把当前目录下所有的图片的后缀名改成该图片的修改时间的时间戳,运行了一下没有生效,是哪里写的不对?谢谢

import os
from datetime import datetime

def rename_images_with_creation_time(directory):
    # 获取目录下的所有文件
    files = os.listdir(directory)
    
    for file in files:
        file_path = os.path.join(directory, file)
        try:
            # 打开文件检查是否为图片
            with open(file_path, 'rb') as img_file:
                if img_file.read(4):  # 简单检查文件头部是否非空
                    # 获取文件创建时间
                    creation_time = os.path.getctime(file_path)
                    # 将创建时间转换为字符串时间戳
                    timestamp_str = str(int(creation_time))
                    
                    # 获取文件扩展名
                    file_extension = os.path.splitext(file)[1]
                    
                    # 新文件名
                    new_file_name = timestamp_str + file_extension
                    new_file_path = os.path.join(directory, new_file_name)
                    
                    # 重命名文件
                    os.rename(file_path, new_file_path)
                    
                    print(f"文件 '{file}' 已重命名为 '{new_file_name}'")
        except (IOError, FileNotFoundError):
            pass

# 获取当前目录路径
directory_path = os.getcwd()

# 重命名并打印所有图片文件
rename_images_with_creation_time(directory_path)

阅读 1.2k
avatarAI BotBETA
可能的原因包括:

1. **文件打开方式不正确**:你的代码试图通过读取文件的前四个字节来检查是否为图片,这种方法并不准确。应该使用文件扩展名或图像库(如PIL)来检查文件是否为图片。

2. **文件权限问题**:如果脚本没有足够的权限来重命名文件,那么`os.rename`将不会生效。确保脚本有足够的权限来修改目标目录中的文件。

3. **文件名冲突**:如果两个文件的创建时间戳相同,那么它们将被重命名为相同的名字,这会导致第二个文件重命名失败。

4. **异常处理**:你的代码在捕获到`IOError`和`FileNotFoundError`时只是简单地`pass`,这可能会隐藏一些重要的错误信息。建议打印出异常信息以便调试。

5. **文件正在被使用**:如果文件正在被其他程序使用,可能无法重命名。

6. **目录路径问题**:确保`directory_path`是正确的,并且确实包含了你想要重命名的图片文件。

建议的修改:

- 使用文件扩展名来检查文件是否为图片(例如,只处理`.jpg`, `.png`, `.gif`等扩展名的文件)。
- 打印出异常信息以便调试。
- 检查文件权限和文件是否被其他程序占用。

import os
from datetime import datetime

def rename_images_with_creation_time(directory):

# 获取目录下的所有文件
files = os.listdir(directory)

image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff']  # 添加更多图片扩展名

for file in files:
    file_path = os.path.join(directory, file)
    if os.path.splitext(file)[1].lower() in image_extensions:  # 检查文件扩展名
        try:
            # 获取文件创建时间
            creation_time = os.path.getctime(file_path)
            # 将创建时间转换为字符串时间戳
            timestamp_str = str(int(creation_time))
            
            # 新文件名
            new_file_name = timestamp_str + os.path.splitext(file)[1]
            new_file_path = os.path.join(directory, new_file_name)
            
            # 检查新文件名是否已存在
            if new_file_name not in os.listdir(directory):
                # 重命名文件
                os.rename(file_path, new_file_path)
                print(f"文件 '{file}' 已重命名为 '{new_file_name}'")
            else:
                print(f"文件 '{file}' 无法重命名,因为 '{new_file_name}' 已存在")
        except Exception as e:
            print(f"处理文件 '{file}' 时出错: {e}")

获取当前目录路径

directory_path = os.getcwd()

重命名并打印所有图片文件

rename_images_with_creation_time(directory_path)

1 个回答

windows 文件被打开时是没有办法改名的,得先把文件关闭了才能改名。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题