Python脚本如何等待文件创建完成并避免循环时跳过等待?
修复拖拽文件后的等待逻辑问题
你的核心问题是等待逻辑没有区分已存在的文件和新拖拽的文件,导致循环时跳过等待。下面是具体的修改方案:
修改要点
- 补全缺失的
os模块导入 - 拖拽操作前,先记录目标文件夹中已有的
.wav文件列表 - 等待新的
.wav文件出现(与之前的列表对比) - 新文件出现后,等待文件大小稳定,确保文件完全写入完成(避免大文件还在传输就执行后续步骤)
修改后的完整代码
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
相关产品推荐
相关产品推荐

