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 |
这将打印两个文件夹中所有文件的路径。
希望能有所帮助。
您可以编写另一个脚本来执行此操作。这只是一个工作,尝试使用
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)) |
将整个文件夹的
如果您想解析特定的文件,例如只解析带有
1 | if file.endswith('.cpp'): |
号