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

Python脚本如何等待文件创建完成并避免循环时跳过等待?

修复拖拽文件后的等待逻辑问题

你的核心问题是等待逻辑没有区分已存在的文件和新拖拽的文件,导致循环时跳过等待。下面是具体的修改方案:

修改要点

  1. 补全缺失的os模块导入
  2. 拖拽操作前,先记录目标文件夹中已有的.wav文件列表
  3. 等待新的.wav文件出现(与之前的列表对比)
  4. 新文件出现后,等待文件大小稳定,确保文件完全写入完成(避免大文件还在传输就执行后续步骤)

修改后的完整代码

import time
import keyboard
import pyautogui
import os  # 补全缺失的模块

toggle = False
path = 'insert path here'

def on_toggle():
    global toggle
    toggle = not toggle
    print("Script " + ("attivato" if toggle else "disattivato"))

def run_script():
    global toggle
    while toggle:
        # 1. 定位鼠标到指定坐标
        pyautogui.moveTo(1352, 675, duration=0.15)

        # 2. 点击
        pyautogui.click()

        # 3. 移动鼠标到拖拽起始位置
        pyautogui.moveTo(1374, 948, duration=0.15)

        # --- 拖拽前先记录现有文件 ---
        # 获取当前文件夹内所有.wav文件的列表
        existing_files = [f for f in os.listdir(path) if f.endswith('.wav')]
        # 记录现有文件数量
        existing_count = len(existing_files)

        # 4. 拖拽文件到目标文件夹
        pyautogui.mouseDown()
        pyautogui.moveTo(567, 673, duration=0.15)
        pyautogui.mouseUp()

        # --- 等待新文件出现 ---
        new_file = None
        while True:
            current_files = [f for f in os.listdir(path) if f.endswith('.wav')]
            # 找到新出现的文件
            new_files = [f for f in current_files if f not in existing_files]
            if new_files:
                new_file = new_files[0]
                break
            time.sleep(0.5)  # 避免循环太占资源

        # --- 等待文件完全写入(大小稳定) ---
        new_file_path = os.path.join(path, new_file)
        prev_size = -1
        while True:
            current_size = os.path.getsize(new_file_path)
            # 如果连续两次获取的文件大小一致,说明写入完成
            if current_size == prev_size:
                break
            prev_size = current_size
            time.sleep(1)  # 大文件可以适当延长等待间隔

        # 5. 返回数据库界面
        pyautogui.moveTo(1249, 670, duration=0.15)
        
        # 6. 点击
        pyautogui.click()

        # 7. 按下向下箭头,准备下一个文件
        keyboard.press_and_release('down')

    print("Script terminato")


# F8 启动/停止脚本
keyboard.add_hotkey('f8', on_toggle)
print("Premi F8 per attivare/disattivare lo script")

# 按下F8后延迟3秒启动脚本
time.sleep(3)
print("Script avviato")
run_script()

代码解释

  • 记录现有文件:拖拽前先抓取当前文件夹的.wav文件列表,确保后续能准确识别新文件
  • 等待新文件出现:循环对比当前文件列表和之前的列表,直到出现新的.wav文件
  • 等待文件写入完成:通过检测文件大小是否稳定,判断文件是否完全传输完毕,解决不同大小文件的等待问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:13:29