【python】读取文件的创建时间、修改时间并写入修改时间

文章目录

需求背景

许多图片压缩软件在压缩图片后,会丢失图片文件的真正创建时间、修改时间,也就会导致图片时间线被打乱。

因此需要从原始图片中读取创建时间、修改时间,并将其中较早的一个写入压缩后图片的修改时间。

  • 注 1:实际观察中发现,有的图片修改时间比创建时间更早
  • 注 2:写入文件的创建时间需要额外安装第三方库 pip install pywin32,而时间线一般只需要修改时间即可,因此没有实现对创建时间的修改。

代码


# 从 source_dir 读取文件创建时间和修改时间
# 将两个时间中最早的一个写入 target_dir 各同名文件
# 用于恢复压缩图片的时间戳

import os
import shutil
import datetime


def get_file_times(file_path):
    # 获取文件的创建时间和修改时间
    created_time = datetime.datetime.fromtimestamp(os.path.getctime(file_path))
    modified_time = datetime.datetime.fromtimestamp(
        os.path.getmtime(file_path))

    return created_time, modified_time


def change_file_time(file_path, new_modify_time):
    # 将新的修改时间转换为时间戳
    modify_timestamp = new_modify_time.timestamp()

    # 使用 os.utime() 函数修改文件的修改时间
    os.utime(file_path, times=(modify_timestamp, modify_timestamp))


def merge_file_times(source_dir, target_dir):
    # 遍历源文件夹中的文件
    for root, dirs, files in os.walk(source_dir):
        for file in files:
            # 构建源文件和目标文件的路径
            source_file_path = os.path.join(root, file)
            target_file_path = os.path.join(target_dir, file)

            # 获取源文件的创建时间和修改时间
            created_time, modified_time = get_file_times(source_file_path)

            # 将创建时间和修改时间中较早的一个作为目标文件的修改时间
            new_modify_time = min(created_time, modified_time)

            # 如果目标文件不存在,则创建一个空文件
            if not os.path.exists(target_file_path):
                continue

            # 修改目标文件的修改时间
            change_file_time(target_file_path, new_modify_time)


# 指定源文件夹和目标文件夹的路径
source_dir = r'C:\Users\PC\Desktop\src'
target_dir = r'C:\Users\PC\Desktop\compress'

# 合并文件时间
merge_file_times(source_dir, target_dir)

相关推荐

  1. 修改容器内部时间

    2024-05-04 05:38:03       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 05:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 05:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 05:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 05:38:03       18 阅读

热门阅读

  1. 如何看待AIGC技术?【模板】

    2024-05-04 05:38:03       9 阅读
  2. python和R对比记忆

    2024-05-04 05:38:03       8 阅读
  3. Vue 2 组件创建全指南:一步一步学习

    2024-05-04 05:38:03       12 阅读
  4. NLP自然语言处理和应用场景介绍

    2024-05-04 05:38:03       7 阅读
  5. react 列表渲染 key解析和 vue的key解析的底层逻辑

    2024-05-04 05:38:03       14 阅读
  6. C++11 设计模式6. 建造者模式,也叫做生成器模式

    2024-05-04 05:38:03       11 阅读
  7. Python基础学习之数据结构

    2024-05-04 05:38:03       10 阅读
  8. 指针(1)

    指针(1)

    2024-05-04 05:38:03      8 阅读
  9. Mybatis扩展

    2024-05-04 05:38:03       9 阅读
  10. 彻底理解-进程的 概念、 组成、特征

    2024-05-04 05:38:03       12 阅读