使用subprocess.Popen()时for循环中的变量名称 - Python

时间:2017-03-20 15:06:16

标签: python loops variables for-loop

我目前编写了这个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”这样的东西

我希望一切都清楚! 谢谢你的回答!

1 个答案:

答案 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)然后我们可以添加我们喜欢的结尾。