我有一个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文件的路径作为参数,并且代码只给它文件所在的文件夹(或者至少不是工作的绝对引用)。
如何解决此问题?
答案 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'):