如何等待一个文件夹/文件完成,最终在Python中处理它?

2024-04-29 07:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个小脚本,用while循环监视已定义的目录。此目录中的每个文件或目录都会压缩为RAR,并在该过程完成后移动到另一个目录。
我的问题是:每次我复制一个文件或文件夹到这个目录,脚本不会等待,并在它看到一个新的文件或文件夹时启动进程。但是,当文件或文件夹大于几KB时,循环将因权限错误而中断。
因为我是Python初学者,我不知道该使用哪个模块。是否有检查模块来查看工具要处理的文件或文件夹是否被其他进程使用?还是我走错了方向?

编辑:为只监听目录添加了代码

watchDir = "L:\\PythonTest\\testfolder\\"
finishedDir = "L:\\PythonTest\\finishedfolders\\"
rarfilesDir = "L:\\PythonTest\\rarfiles\\"
rarExe = "L:\\PythonTest\\rar.exe"
rarExtension = ".rar"
rarCommand = "a"

while True:
    dirList = [name for name in os.listdir(watchDir) if os.path.isdir(os.path.join(watchDir,name))]
    for entryName in dirList:
        if not os.path.exists((os.path.join(finishedDir,entryName))):
            sourcePath = os.path.join(watchDir,entryName)
            entryNameStripped = entryName.replace(" ", "")
            os.chdir(watchDir)
            archiveName = rarfilesDir+entryNameStripped+rarExtension
            subprocesscall = [rarExe, rarCommand, archiveName, entryName]
            subprocess.call(subprocesscall, shell=True)
            shutil.move(sourcePath,finishedDir)

当我运行脚本并尝试添加一个数GB的文件(在以下几行中命名为#filename#)时,会出现以下错误:

^{pr2}$

Tags: 文件pathname目录脚本文件夹进程os
1条回答
网友
1楼 · 发布于 2024-04-29 07:25:00

而不是使用操作系统列表目录,您可以使用手术室步行, 手术室步行生成3元组dirpath(目录的路径、文件名(该dirpath中的所有文件)、dirnames(dirpath中的所有子目录)

for x,y,z in os.walk('path-of-directory'):
    do you stuff with x,y,z the three tuples

相关问题 更多 >