一、用到的函数
1)os.listdir()
out = os.listdir(path)
path – 需要列出的目录路径
out – 返回指定路径下的文件和文件夹列表
2) os.stat()
import os
print(os.stat(r'E:\sun\WORK\bug\sb.txt'))
# (st_mode=33206, st_ino=2533274790442744, st_dev=1882760384, st_nlink=1, st_uid=0, st_gid=0, st_size=3, st_atime=1692755110, st_mtime=1692755106, st_ctime=1692696484)
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_mode) # 权限模式
# 33206
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_ino) # inode号
# 2533274790442744
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_dev) # 存储设备
# 1882760384
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_nlink) # 硬链接数目
# 1
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_uid) # 所有用户的user id
# 0
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_gid) # 所有用户的group id
# 0
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_size) # 文件的大小,以位为单位
# 3
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_atime) # 文件最后访问时间
# 1692755110.9038787
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_mtime) # 文件最后修改时间
# 1692755106.9584649
print(os.stat(r'E:\sun\WORK\bug\sb.txt').st_ctime) # 文件创建时间
# 1692696484.5371683
os.stat()的几个属性解释如下
st_mode − 文件的类型和文件的mode bits
st_ino − inode号
st_dev − 存放在哪个设备上
st_nlink − 硬链接数目
st_uid − 用户的id
st_gid − 用户的group id
st_size − 大小,单位是位
st_atime − 最后访问的时间,单位是秒
st_mtime − 最后内容改变的时间,单位是秒
st_ctime − windows上是创建的时间,unix上是元数据最后改变的时间,单位是秒
3)shutil.copyfile()
shutil.copyfile(file1,file2)
file1为需要复制的源文件的文件路径
file2为目标文件的文件路径+文件名
可以修改其复制后的文件名,会将目标文件路径下同名文件覆盖
二、代码
import os
import time
import shutil
# 检测路径
folder_path = r'E:\sun\WORK\bug'
number = 1
while True:
f1_time = []
f2_time = []
# 获取路径下的文件夹名称,返回一个列表
folder_state1 = os.listdir(folder_path)
for f1 in folder_state1:
# 获取每一个文件的修改时间并将其储存进入一个列表中
stinfo1 = os.stat(fr'E:\sun\WORK\bug\{f1}')
f1_time.append(stinfo1)
print(f"开始第{number}轮检测")
# 间隔五秒后检测文件夹下文件的修改时间
time.sleep(5)
folder_state2 = os.listdir(folder_path)
for f2 in folder_state2:
stinfo2 = os.stat(fr'E:\sun\WORK\bug\{f2}')
f2_time.append(stinfo2)
# 判断文件数量是否一样
if len(f1_time) == len(f2_time):
# 比较一个文件不同时间的修改时间是否相同,若不同则将其移至指定文件夹中
for i in range(len(f1_time)):
print(folder_state1[i])
if folder_state1[i][-4:] == ".txt" and f1_time[i] < f2_time[i]:
print("检测到文件修改")
shutil.copyfile(fr'E:\sun\WORK\bug\{folder_state1[i]}', fr"E:\sun\{folder_state1[i]}")
else:
continue
number = number + 1