Skip to content

Instantly share code, notes, and snippets.

@lpe234
Last active December 23, 2024 06:36
Show Gist options
  • Save lpe234/c131cdffa0cf9721e94a4bf701d9b42b to your computer and use it in GitHub Desktop.
Save lpe234/c131cdffa0cf9721e94a4bf701d9b42b to your computer and use it in GitHub Desktop.
项目需要,某些场景下需要修改文件的创建(Date created)及修改时间(Date modified),另外还有个访问时间(Date accessed),不过这个时间打开文件夹访问时就会更新。
import random
from datetime import datetime
import os
import pywintypes
import win32file
def get_all_files(path_dir: str):
"""
获取指定目录下的所有文件
:param path_dir:
:return:
"""
files = []
for dirpath, dirnames, filenames in os.walk(path_dir):
for filename in filenames:
abs_file = os.path.join(dirpath, filename)
files.append(abs_file)
for dirname in dirnames:
abs_dir = os.path.join(dirpath, dirname)
# 添加文件夹
files.append(abs_dir)
# 递归获取文件
files += get_all_files(abs_dir)
return files
def rnd_minute():
return random.randint(1, 59)
def rnd_hour():
return random.randint(10, 19)
def rnd_day():
return random.randint(1, 30)
def rnd_month():
return random.randint(4, 5)
def rnd_days():
return random.randint(10, 50)
def change_file_time(filename: str, create_time: float, modified_time: float):
"""
修改文件的创建时间和修改时间
:param filename: 文件名
:param create_time: 创建时间
:param modified_time: 修改时间
:return:
"""
if os.path.isdir(filename):
os.utime(filename, (create_time, modified_time))
return
handle = win32file.CreateFile(filename, win32file.GENERIC_WRITE, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
win32file.SetFileTime(handle, pywintypes.Time(create_time), pywintypes.Time(modified_time), pywintypes.Time(modified_time))
def main():
# 获取全部文件
hb_dir = r'G:\Projects\xxx'
files = get_all_files(hb_dir)
logger.info(f'共{len(files)}个文件')
filter_files = []
# 仅处理 修改时间为 2023年7月及以后的文件
logger.info('筛选文件')
seven_one_ts = datetime.strptime('2023-07-01', '%Y-%m-%d').timestamp()
for f in tqdm(files, unit='file'):
modified_time = os.path.getmtime(f)
if modified_time > seven_one_ts:
filter_files.append(f)
logger.info(f'筛选后{len(filter_files)}个文件')
# 将文件的
# - 修改时间改为2023年[5,6]月份,时间为[10-20]时,分秒随机。
# - 创建日期为 修改时间向前推[10, 50]天,时间随机
logger.info('修改文件时间')
for idx, file in tqdm(enumerate(filter_files), unit='file', total=len(filter_files)):
modified_time = datetime.strptime(f'2023-{rnd_month()}-{rnd_day()} {rnd_hour()}:{rnd_minute()}:{rnd_minute()}','%Y-%m-%d %H:%M:%S').timestamp()
create_time = datetime.strptime(f'2023-{rnd_month()}-{rnd_day()} {rnd_hour()}:{rnd_minute()}:{rnd_minute()}','%Y-%m-%d %H:%M:%S').timestamp()
# 将modified_time 添加range_day()天数
create_time -= rnd_days() * 24 * 60 * 60
# 修改时间
change_file_time(file, create_time, modified_time)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment