python-在多个文件上运行脚本

时间:2015-06-17 17:08:25

标签: python batch-file subprocess

我有一个python脚本,它将文件名作为命令参数并处理该文件。但是,我需要处理数千个文件,我想在每个文件上运行脚本,而不必每次都添加文件名作为参数。

在这样的单个文件上运行时脚本运行良好:

myscript.py /my/folder/of/stuff/text1.txt

我有这个代码可以同时执行所有操作,但它不起作用

for fname in glob.iglob(os.path.join('folder/location')):
    proc = subprocess.Popen([sys.executable, 'script/location.py', fname])
    proc.wait()

每当我运行上面的代码时,它都不会抛出错误,但是没有给我预期的输出。我认为问题在于脚本期望将.txt文件的路径作为参数,并且代码只给它文件所在的文件夹(或者至少不是工作的绝对引用)。

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

如果文件位于同一文件夹中,并且脚本支持该文件,则可以使用该语法:

myscript.py /my/folder/of/stuff/*.txt

外卡将被相应的文件替换。

如果脚本不支持它,请按照此快速示例中的方式隔离该过程:

import sys

def printFileName(filename):
  print filename

def main():
  args = sys.argv[1:]
  for filename in args:
    printFileName(filename)

if __name__ == '__main__':
  main()

然后从控制台,你可以这样开始:

python MyScript.py /home/andy/tmp/1/*.txt /home/andy/tmp/2/*.html

这将打印两个文件夹中所有文件的路径。

希望这可以提供一些帮助。

答案 1 :(得分:0)

您可以编写另一个脚本来执行此操作。 这只是一个解决方法, 尝试使用os.walk

import sys, os
for root, dir, files in os.walk(PATH):
    for file in files:
        os.system ('myscript.py {}'.format(root + '\\' + file))

将整个文件夹的PATH提供给os.walk,它会解析目录中的所有文件。

如果要解析特定文件,例如只说文件.cpp,那么您可以像这样过滤文件名。在for file in files

之后添加此内容
if file.endswith('.cpp'):