有关如何在Python中创建简单的文件名搜索和复制程序的问题

问题描述 投票:0回答:1

我最近尝试创建一个Python脚本来读取与该Python脚本相同目录中的任何.jpg文件的名称文件,在另一个speficic目录中查找相同的文件名,但格式为.dds,还查找其他一些具有相同名称但后缀不同的.dds文件,然后将新的.dds文件复制到.jpg文件和脚本所在的目录中。

由于我自己进行了大量纹理处理工作,因此我想创建一个程序,该程序会自动收集一些我需要的.dds纹理以进行处理。

由于我对Python一无所知,因此我请一位朋友来帮助我。我们设法创建了一段代码,并且以它的非常基本的形式工作,但是问题是由于我对Python中“ for循环”的了解有限,该脚本在每次找到一个脚本后都会挂起一分钟。命名相同的文件组并将其复制。我认为这是因为循环继续搜索目录的其余部分,但是我只是希望循环一旦找到并复制单个文件名就过早结束。

我和我的朋友创建了一些代码,但由于我对Python的了解非常有限,所以我尝试使用'break'命令来停止循环,但是似乎无法正常工作。我还广泛搜索了这名被拘留者,但无法使其正常工作。

import os

from pathlib import Path
import shutil

currentDir = os.getcwd()

for fileNamePath in Path(currentDir).glob('**\\*_a.jpg'):

    filePath = os.path.split(fileNamePath)[0]
    fileNameExt = os.path.basename(fileNamePath)
    fileNameCamo = os.path.splitext(fileNameExt)[0]
    fileNameSpecular = fileNameCamo.replace("_a","_mg")
    fileNameBump = fileNameCamo.replace("_a","_n")
    fileNameShadow = fileNameCamo.replace("_a","_ao")
    print("found " + fileNameCamo + " in the first folder")

    fileNames = []
    fileNames.append(fileNameCamo)
    fileNames.append(fileNameSpecular)
    fileNames.append(fileNameBump)
    fileNames.append(fileNameShadow)

    for fileName in fileNames:

        for foundFileNamePath in Path('*directory*').glob('**\\' + fileName + '*'):

            if foundFileNamePath:

                foundFileNameExt = os.path.basename(foundFileNamePath)
                foundFileName = os.path.splitext(foundFileNameExt)[0]
                print("found " + foundFileName + " in the second folder")

                shutil.copy(foundFileNamePath, filePath)
                print("copied " + foundFileName + " to " + filePath)

                break

总结起来,这就是程序应如何正确运行:

1)脚本在与该目录相同的目录中找到一个.jpg文件>

2)脚本创建了3个新的文件名变体,每个变体都带有适当的后缀(_mg,_n等)

3)脚本将所有文件名添加到数组中>

4)脚本使用该文件名数组为这些文件名启动“ for循环”

5)脚本使用前一个“ for循环”中的文件名启动另一个“ for循环”并搜索适当的目录

6)如果脚本在第二个目录中找到匹配的.dds文件名,则将其复制到.jpg文件所在的目录中

7)该脚本对数组中所有剩余的文件名(_mg,_n等)执行此操作

8)脚本对目录中的每个.jpg文件重复步骤1-7


这全部由程序完成,但是问题在于,每当步骤7)完成时,终端会挂起一分钟以上,然后移至下一个文件名。我认为这是因为我没有正确使用'break'命令,并且即使在找到并复制了匹配的.dds文件之后,搜索第二个目录的'for循环'仍然继续进行。那不好,因为到那时程序的目的被破坏了,我自己手动找到纹理会更快,这就是我到目前为止所做的事情。

我希望循环在找到并复制一个.dds文件后就简单地结束,并希望脚本能够立即自动恢复搜索下一个文件名。

提前感谢您的帮助!

我最近尝试创建一个Python脚本来读取与Python脚本相同目录中的任何.jpg文件的名称文件,在另一个speficic目录中查找相同文件名,但在.dds中...

python
1个回答
0
投票
使用python关键字'continue'停止循环的当前迭代并继续下一个迭代。

https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

© www.soinside.com 2019 - 2024. All rights reserved.