You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python检测共享文件夹中的随机命名JPG文件并处理?

嘿,这个需求其实不难实现,我给你两种靠谱的方案,你可以根据场景选:

方案一:定时扫描目录(轮询法)

这是最贴合你原本思路的做法,每隔一段时间扫描共享目录,找出符合格式的图片文件逐个处理,不用提前知道文件名。

实现思路:

  • 用glob.glob或os.listdir筛选目录里的.jpg文件
  • 先尝试打开文件(避免处理PC2还没上传完成的不完整文件)
  • 成功验证后加载图片、执行处理逻辑,最后删除文件

代码示例:

import os
import glob
import time
from PIL import Image  # 用PIL处理图片,需先安装:pip install pillow

SHARED_DIR = "你的共享目录绝对路径"

while True:
    # 筛选所有jpg文件,也可以精准匹配你的命名规则:glob.glob(os.path.join(SHARED_DIR, "data-*.jpg"))
    image_files = glob.glob(os.path.join(SHARED_DIR, "*.jpg"))
    
    for img_path in image_files:
        # 验证文件是否已上传完成(避免读取到半写入的文件)
        try:
            with open(img_path, 'rb'):
                pass
        except PermissionError:
            # 文件还在上传中,跳过本次循环,下次扫描再处理
            continue
        
        # 执行图像处理逻辑
        try:
            img = Image.open(img_path)
            print(f"开始处理图片:{img_path}")
            # 这里替换成你的图像处理代码,比如裁剪、识别等
            # img.show()
            
            # 处理完成后删除文件
            os.remove(img_path)
            print(f"已处理并删除:{img_path}")
        except Exception as e:
            print(f"处理图片失败:{e}")
            # 可根据情况决定是否保留文件,或跳过后续操作
    
    # 无文件时等待1秒
    time.sleep(1)

注意点:

  • 一定要加文件打开验证,否则容易读取到损坏的不完整图片
  • 如果共享目录有其他无关文件,可以用更精准的匹配规则(比如data-*.jpg)过滤

方案二:实时监控目录变化(事件驱动法)

如果轮询的1秒间隔太长,或者想更高效,可以用watchdog库实时监听目录的文件创建事件,新图片一上传就立刻处理,不用反复扫描。

实现步骤:

  1. 先安装依赖:pip install watchdog
  2. 继承FileSystemEventHandler类,重写文件创建事件的处理逻辑
  3. 启动监控器,持续监听共享目录

代码示例:

import os
import time
from PIL import Image
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

SHARED_DIR = "你的共享目录绝对路径"

class ImageUploadHandler(FileSystemEventHandler):
    def on_created(self, event):
        # 忽略目录创建事件,只处理文件
        if event.is_directory:
            return
        
        # 只处理jpg格式的文件
        if event.src_path.endswith(".jpg"):
            # 短暂等待确保文件上传完成(事件触发时可能还在写入)
            time.sleep(0.5)
            try:
                # 加载并处理图片
                img = Image.open(event.src_path)
                print(f"实时处理图片:{event.src_path}")
                # 替换成你的图像处理逻辑
                
                # 处理完成后删除文件
                os.remove(event.src_path)
            except Exception as e:
                print(f"实时处理失败:{e}")

if __name__ == "__main__":
    event_handler = ImageUploadHandler()
    observer = Observer()
    # 监听指定目录,不递归子目录
    observer.schedule(event_handler, SHARED_DIR, recursive=False)
    observer.start()
    
    try:
        # 保持监控运行
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        # 按下Ctrl+C停止监控
        observer.stop()
    observer.join()

注意点:

  • 文件创建事件触发时,PC2可能还在写入数据,所以加个短延迟更稳妥
  • 这种方法比轮询更高效,适合对实时性要求高的场景

两种方案各有优劣:轮询法简单无需额外依赖,事件驱动法更实时高效,你可以根据自己的需求选择~

内容的提问来源于stack exchange,提问作者BhanuKiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:07