Last active
December 23, 2024 06:36
-
-
Save lpe234/c131cdffa0cf9721e94a4bf701d9b42b to your computer and use it in GitHub Desktop.
项目需要,某些场景下需要修改文件的创建(Date created)及修改时间(Date modified),另外还有个访问时间(Date accessed),不过这个时间打开文件夹访问时就会更新。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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