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

4

我有一个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文件的路径作为参数,而代码只提供了文件所在的文件夹(或者至少不是有效的绝对引用)。
如何解决这个问题?

1
为什么不编辑 myscript.py 并将其拆分为函数呢?然后您可以执行 from myscript import my_function,并在需要的每个文件中调用 my_function - Blender
1
os.path.join('folder/location') 没有任何作用。请尝试 os.path.join('folder/location', '*.txt') — 通常会将带有通配符字符的文件名模式参数传递给 glob.iglob() - martineau
2个回答

2
如果文件在同一文件夹中,并且脚本支持,您可以使用以下语法: ```html

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

```
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

这将打印出两个文件夹中所有文件的路径。 希望这能对你有所帮助。

你需要在Windows中使用glob()函数。 - Neil McGuigan

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))

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

如果您想解析特定的文件,例如只有.cpp文件,则可以像这样过滤文件名。在for file in files之后添加此内容。

if file.endswith('.cpp'):

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接