【问题标题】:python- run script on multiple filespython-在多个文件上运行脚本
【发布时间】:2015-09-03 01:40:02
【问题描述】:

我有一个 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 文件的路径作为参数,而代码只是给它文件所在的文件夹(或者至少不是工作的绝对引用)。

如何解决这个问题?

【问题讨论】:

标签: python batch-file subprocess


【解决方案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

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

希望这能有所帮助。

【讨论】:

  • 你需要在Windows中使用glob()
【解决方案2】:

您可以编写另一个脚本来执行此操作。 这只是一个解决方法, 尝试使用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,它会解析目录中的所有文件。

如果你想解析特定的文件,例如只有带有.cppfiles 的文件,那么你可以像这样过滤文件名。在for file in files之后添加这个

if file.endswith('.cpp'):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2016-03-06
    • 2020-05-08
    相关资源
    最近更新 更多