我最近尝试创建一个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中...