Python實現(xiàn)修改文件創(chuàng)建時間(支持任意時間修改)
前言
本文主要來和大家介紹一個Python腳本,用于修改文件的創(chuàng)建時間和系統(tǒng)時間
主要通過change_file_creation_time和change_system_times函數(shù)實現(xiàn),同時演示了如何使用ctypes庫來操作系統(tǒng)時間
完整代碼如下
# !/usr/bin/python3 # -*- coding:utf-8 -*- """ @author: JHC000abc@gmail.com @file: change_files_times.py @time: 2023/11/22 11:55 @desc: """ import os import time import ctypes def 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,sec def 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"): """ 調(diào)用系統(tǒng)接口更改系統(tǒng)時間,隔一段時間系統(tǒng)時鐘會自動更新回當前真實時間 """ # 定義 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) ) # 調(diào)用 SetSystemTime 函數(shù)設置系統(tǒng)日期 ctypes.windll.kernel32.SetSystemTime(ctypes.byref(target_date)) def cp_files(file,out_path): """ 復制文件,實現(xiàn)更改文件創(chuàng)建時間 """ 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_file def 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__': # 備注:程序運行必須獲取管理員權限,否則,修改文件創(chuàng)建時間將失敗 in_file = input("請輸入要修改文件路徑:") out_path = input("請輸入更改時間后文件保存路徑:") create_time = input("請輸入文件創(chuàng)建時間:[2023-12-12 12:12:12]") change_time = input("請輸入文件修改時間:[2023-12-12 12:12:12]") # in_file = R"D:\Desktop\miniblink-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 os import sys from datetime import datetime from 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() # 頂部控制區(qū)域 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) # 滾動區(qū)域用于文件列表 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): """刷新當前目錄下的文件列表""" # 清空現(xiàn)有條目 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))] # 為每個文件創(chuàng)建條目 for file in files: self.add_file_entry(file) def add_file_entry(self, filename): """為單個文件創(chuàng)建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 }) # 添加到滾動區(qū)域 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() # 轉(zhuǎn)換為時間戳 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實現(xiàn)修改文件創(chuàng)建時間(支持任意時間修改)的詳細內(nèi)容,更多關于Python修改文件時間的資料請關注腳本之家其它相關文章!
相關文章
python爬蟲開發(fā)之urllib模塊詳細使用方法與實例全解
這篇文章主要介紹了python爬蟲開發(fā)之urllib模塊詳細使用方法與實例全解,需要的朋友可以參考下2020-03-03解決django同步數(shù)據(jù)庫的時候app models表沒有成功創(chuàng)建的問題
今天小編就為大家分享一篇解決django同步數(shù)據(jù)庫的時候app models表沒有成功創(chuàng)建的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法
今天小編就為大家分享一篇利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06