我目前编写了这个Python代码:
import subprocess, os, sys, tkFileDialog
path1 = tkFileDialog.askdirectory(title='Choose the folder where the point clouds .ply are located')
print path1
filePoisson = tkFileDialog.askopenfilename(title='Choose PoissonRecon.exe')
for filename in os.listdir(path1):
if filename.endswith(".ply") :
subprocess.Popen(
[
filePoisson,
"--in", "os.path.abspath(filename)",
"--color", "16",
"--depth", "9",
"--out", "outputname.ply",
"--density",
"--samplesPerNode", "1.50",
"--fullDepth", "5",
"--pointWeight", "4",
"--bType", "2"
]
)
else:
continue
raw_input("Press Enter to continue...")
所以第一个问题就在这里:
"--in", "os.path.abspath(filename)",
这里PoissonRecon.exe需要第一个.ply文件的路径,该文件位于选择为path1的文件夹中。 因此,例如,期望“E:\\ POISSON \\ TEST \\ firstFile.ply”之类的东西。 但是,当我使用循环时,我不知道如何编写这部分代码。
第二个问题几乎相似:
"--out", "outputname.ply",
这里PoissonRecon.exe只需要输出名称。 例如,如果变量path1(所有.ply文件所在的位置)的路径为“E:\\ POISSON \\ TEST”,则程序将只将输出文件保存在此文件夹中。
但是我想把变量“filename”加上像“_AFTER_POISSON.ply”这样的东西
我希望一切都清楚! 谢谢你的回答!
答案 0 :(得分:0)
您可以使用glob查找以.ply
结尾的所有文件并迭代它们,例如:
import glob, os
import tkFileDialog
path1 = tkFileDialog.askdirectory(title='Choose the folder where the point clouds .ply are located')
print path1
filePoisson = tkFileDialog.askopenfilename(title='Choose PoissonRecon.exe')
for f in glob.glob(os.path.join(path1, '*.ply')):
input_filename = os.path.join(os.path.dirname(os.path.abspath(f)), f)
subprocess.Popen(
[
filePoisson,
"--in", input_filename,
"--color", "16",
"--depth", "9",
"--out", f[:-4] + '_AFTER_.ply',
"--density",
"--samplesPerNode", "1.50",
"--fullDepth", "5",
"--pointWeight", "4",
"--bType", "2"
]
)
raw_input("Press Enter to continue...")
这将保持您的文件名不变,添加输入的abs路径并替换输出的结尾
作为参考,glob.glob('*.ply')
返回具有该扩展名的所有文件的列表。然后os.path.dirname(os.path.abspath(f))
找到该文件的路径,我们可以组合输入文件。 f[:-4]
获取文件名,删除最后4个字符(.ply
)然后我们可以添加我们喜欢的结尾。