【Python】检测指定文件夹下的文件是否修改

文章介绍了如何使用Python的os.listdir()获取目录内容,os.stat()获取文件属性(如修改时间、大小等),以及shutil.copyfile()进行文件复制,实现对文件修改时间的实时检测和处理。
摘要由CSDN通过智能技术生成

一、用到的函数

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
Python中,可以使用`os`和`time`模块来检测文件夹文件的变化。 首先,我们需要获取文件夹中所有文件的列表。可以使用`os`模块的`listdir()`函数来实现这一点,它将返回一个包含文件名的列表。例如,`file_list = os.listdir('/path/to/folder')`可以获取指定文件夹中的所有文件。 接下来,我们可以使用`time`模块的`stat()`函数来获取文件的最后修改时间。使用`os.path`模块的`join()`函数将文件名与文件夹路径拼接在一起,例如`file_path = os.path.join('/path/to/folder', file_name)`。 然后,我们可以比较文件的最后修改时间来检测文件是否发生了变化。我们可以使用`os.path`模块的`getmtime()`函数获取文件的最后修改时间,并与上次记录的时间进行比较。 以下是一个示例代码: ```python import os import time # 记录文件的最后修改时间 last_mod_time = {} def detect_file_changes(folder): file_list = os.listdir(folder) for file_name in file_list: file_path = os.path.join(folder, file_name) # 检查文件是否存在于记录中 if file_name not in last_mod_time: last_mod_time[file_name] = os.path.getmtime(file_path) continue # 获取文件的最后修改时间 current_mod_time = os.path.getmtime(file_path) # 比较最后修改时间 if current_mod_time != last_mod_time[file_name]: print(f"文件 {file_name} 发生了变化!") # 更记录的最后修改时间 last_mod_time[file_name] = current_mod_time # 调用函数检测文件夹文件的变化 detect_file_changes('/path/to/folder') ``` 该示例代码会打印出发生变化的文件名。你可以根据具体需求进一步添加处理变化的代码,比如重处理文件、发送通知等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值