Python实现修改文件创建时间 python中怎么修改文件名
前言
这篇文章小编将主要来和大家介绍一个Python脚本,用于修改文件的创建时刻和体系时刻
主要通过change_file_creation_time和change_system_times函数实现,同时演示了怎样使用ctypes库来操作体系时刻
完整代码如下
!/usr/bin/python3 — coding:utf-8 –“””@author: JHC000abc@gmail.com@file: change_files_times.py@time: 2023/11/22 11:55 @desc: “””import osimport timeimport ctypesdef parse_date(date): “”” 2023-12-12 12:12:12 解析时刻 “”” head,tail = date.split(” “) year,month,day = head.split(“-“) hour,min,sec = tail.split(“:”) return year,month,day,hour,min,secdef change_file_creation_time(file_path, year,month,day,hour,min,sec): “”” 修改文件更改时刻 “”” new_creation_time = time.mktime((int(year), int(month), int(day), int(hour), int(min), int(sec), 0, 0, 0)) 获取文件的修改时刻和访问时刻 access_time = os.path.getatime(file_path) modified_time = os.path.getmtime(file_path) 修改文件的修改时刻 os.utime(file_path, (access_time, new_creation_time))def change_system_times(year,month,day,hour,min,sec,msec=”0″): “”” 调用体系接口更改体系时刻,隔一段时刻体系时钟会自动更新回当前诚实时刻 “”” 定义 SYSTEMTIME 结构体 class SYSTEMTIME(ctypes.Structure): _fields_ = [ (‘wYear’, ctypes.c_ushort), (‘wMonth’, ctypes.c_ushort), (‘wDayOfWeek’, ctypes.c_ushort), (‘wDay’, ctypes.c_ushort), (‘wHour’, ctypes.c_ushort), (‘wMinute’, ctypes.c_ushort), (‘wSecond’, ctypes.c_ushort), (‘wMilliseconds’, ctypes.c_ushort) ] 设置目标日期 target_date = SYSTEMTIME( wYear=int(year), wMonth=int(month), wDayOfWeek=0, 这里可以忽略,程序会自动填充正确的值 wDay=int(day), wHour=int(hour)-8, wMinute=int(min), wSecond=int(sec), wMilliseconds=int(msec) ) 调用 SetSystemTime 函数设置体系日期 ctypes.windll.kernel32.SetSystemTime(ctypes.byref(target_date))def cp_files(file,out_path): “”” 复制文件,实现更改文件创建时刻 “”” name = os.path.split(file)[-1] save_file = os.path.join(out_path,name) with open(file,”rb”)as fp, open(save_file,”wb”)as fp2: fp2.write(fp.read()) return save_filedef main(create_time,change_time,in_file,out_path): “”” 处理流程 “”” year, month, day, hour, min, sec = parse_date(create_time) change_system_times(year, month, day, hour, min, sec) save_file = cp_files(in_file,out_path) year, month, day, hour, min, sec = parse_date(change_time) change_file_creation_time(save_file, year,month,day,hour,min,sec)if __name__ == ‘__main__’: 备注:程序运行必须获取管理员权限,否则,修改文件创建时刻将失败 in_file = input(“请输入要修改文件路径:”) out_path = input(“请输入更改时刻后文件保存路径:”) create_time = input(“请输入文件创建时刻:[2023-12-12 12:12:12]”) change_time = input(“请输入文件修改时刻:[2023-12-12 12:12:12]”) in_file = R”D:Desktopminiblink-20230412更新日志.txt” out_path = R”D:Desktop” create_time = “2020-12-12 12:12:12” change_time = “2021-12-12 12:12:12” main(create_time,change_time,in_file,out_path)
技巧补充
使用Python批量修改文件修改时刻
示例如下
import osimport sysfrom datetime import datetimefrom PyQt5.QtWidgets import (QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QComboBox, QDateTimeEdit, QPushButton, QFileDialog, QCheckBox, QScrollArea, QGroupBox)from PyQt5.QtCore import QDateTime, Qt class FileTimeModifier(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(“文件修改时刻批量修改工具”) self.setGeometry(100, 100, 800, 600) 主部件和布局 self.main_widget = QWidget() self.main_layout = QVBoxLayout() 顶部控制区域 self.control_group = QGroupBox(“控制面板”) self.control_layout = QHBoxLayout() self.add_button = QPushButton(“添加文件”) self.add_button.clicked.connect(self.add_files) self.select_all_checkbox = QCheckBox(“全选”) self.select_all_checkbox.stateChanged.connect(self.toggle_select_all) self.modify_button = QPushButton(“应用修改”) self.modify_button.clicked.connect(self.modify_files) self.control_layout.addWidget(self.add_button) self.control_layout.addWidget(self.select_all_checkbox) self.control_layout.addWidget(self.modify_button) self.control_group.setLayout(self.control_layout) 滚动区域用于文件列表 self.scroll_area = QScrollArea() self.scroll_widget = QWidget() self.scroll_layout = QVBoxLayout() 初始文件列表 self.file_entries = [] self.scroll_widget.setLayout(self.scroll_layout) self.scroll_area.setWidget(self.scroll_widget) self.scroll_area.setWidgetResizable(True) 添加到主布局 self.main_layout.addWidget(self.control_group) self.main_layout.addWidget(self.scroll_area) self.main_widget.setLayout(self.main_layout) self.setCentralWidget(self.main_widget) 获取当前目录下的文件 self.refresh_file_list() def refresh_file_list(self): “””刷新当前目录下的文件列表””” 清空现有条目 for entry in self.file_entries: entry[‘widget’].setParent(None) self.file_entries.clear() 获取当前目录下的所有文件 current_dir = os.path.dirname(os.path.abspath(__file__)) files = [f for f in os.listdir(current_dir) if os.path.isfile(os.path.join(current_dir, f))] 为每个文件创建条目 for file in files: self.add_file_entry(file) def add_file_entry(self, filename): “””为单个文件创建UI条目””” entry_widget = QWidget() entry_layout = QHBoxLayout() 复选框 checkbox = QCheckBox() checkbox.setChecked(True) 文件名标签 file_label = QLabel(filename) file_label.setMinimumWidth(200) 修改时刻选择器 time_edit = QDateTimeEdit() time_edit.setDisplayFormat(“yyyy-MM-dd HH:mm:ss”) time_edit.setDateTime(QDateTime.currentDateTime()) 添加到布局 entry_layout.addWidget(checkbox) entry_layout.addWidget(file_label) entry_layout.addWidget(time_edit) entry_widget.setLayout(entry_layout) 保存条目信息 self.file_entries.append( ‘widget’: entry_widget, ‘checkbox’: checkbox, ‘filename’: filename, ‘time_edit’: time_edit }) 添加到滚动区域 self.scroll_layout.addWidget(entry_widget) def add_files(self): “””添加文件到列表””” current_dir = os.path.dirname(os.path.abspath(__file__)) files, _ = QFileDialog.getOpenFileNames(self, “选择文件”, current_dir) for file in files: filename = os.path.basename(file) 检查是否已存在 if not any(entry[‘filename’] == filename for entry in self.file_entries): self.add_file_entry(filename) def toggle_select_all(self, state): “””全选/取消全选””” for entry in self.file_entries: entry[‘checkbox’].setChecked(state == Qt.Checked) def modify_files(self): “””修改选中的文件的修改时刻””” current_dir = os.path.dirname(os.path.abspath(__file__)) modified_count = 0 for entry in self.file_entries: if entry[‘checkbox’].isChecked(): filepath = os.path.join(current_dir, entry[‘filename’]) new_time = entry[‘time_edit’].dateTime().toPyDateTime() 转换为时刻戳 timestamp = new_time.timestamp() 修改文件时刻 try: os.utime(filepath, (timestamp, timestamp)) modified_count += 1 except Exception as e: print(f”修改文件 entry[‘filename’]} 时刻失败: e}”) print(f”成功修改了 modified_count} 个文件的修改时刻”) if __name__ == “__main__”: app = QApplication(sys.argv) window = FileTimeModifier() window.show() sys.exit(app.exec_())
以上就是Python实现修改文件创建时刻(支持任意时刻修改)的详细内容,更多关于Python修改文件时刻的资料请关注风君子博客其它相关文章!
无论兄弟们可能感兴趣的文章:
- Python+PyQt5开发超全能的文件时刻戳修改器
- Python实现批量修改文件时刻属性
- python怎样修改文件时刻属性
- python 两种技巧修改文件的创建时刻、修改时刻、访问时刻
- python获得文件创建时刻和修改时刻的技巧