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

python- run script on multiple files

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

当在如下单个文件上运行时,脚本工作良好:

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

我有这个代码可以一次完成所有的工作,但它不起作用

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

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

如何纠正这个问题?


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

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

通配符将替换为相应的文件。

如果脚本不支持它,请像下面的示例一样隔离流程:

1
2
3
4
5
6
7
8
9
10
11
12
import sys

def printFileName(filename):
  print filename

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

if __name__ == '__main__':
  main()

然后从控制台,您可以这样启动它:

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

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

希望能有所帮助。


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

1
2
3
4
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后面加上这个

1
if file.endswith('.cpp'):