修改python脚本以在目录中的每个文件上运行

sat*_*t_s 7 python

所以我有一个python脚本,它将文件名作为命令参数并处理该文件.但是,因为我有263个文件需要相同的处理,我想知道是否可以使用for循环修改命令参数部分以连续运行文件夹中的所有文件?干杯,周六

编辑:

系统参数的代码在这里:

try:
    opt_list, args = getopt.getopt(sys.argv[1:], 'r:vo:A:Cp:U:eM:')

except getopt.GetoptError, msg:
    print 'prepare_receptor4.py: %s' %msg
    usage()
    sys.exit(2)
Run Code Online (Sandbox Code Playgroud)

'r'是需要处理的文件的名称,其他是可选参数.我不知道如何用for循环修改它.

Dav*_*d Z 11

实际上,无论你使用什么shell,都可能有一些语法可以很容易地用于此.在Bash中,例如:

for f in *; do python myscript.py $f; done
Run Code Online (Sandbox Code Playgroud)

要在Python中实际执行此操作,我建议构建您的程序,以便主代码在一个函数中,该函数接受一个参数,即文件名.

def process(filename):
    ...code goes here...
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调用这个函数,

for f in os.listdir(folder):
    process(f)
Run Code Online (Sandbox Code Playgroud)

folder 可以作为命令行参数传递,或者只是写入脚本(如果它不是你要重用的东西).

编辑:为了响应您的编辑,我建议只使用文件名作为常规命令行参数,而不使用该-r选项,这样他们就可以了args.那你可以做

for f in args:
    process(f)
Run Code Online (Sandbox Code Playgroud)

或者如果您希望将目录名称作为命令行参数传递,

for d in args:
    for f in os.listdir(d):
        process(f)
Run Code Online (Sandbox Code Playgroud)

或者,我想你可以传递该-r选项的多个实例,然后执行

for opt, arg in opt_list:
    if opt == '-r':
        process(arg)
Run Code Online (Sandbox Code Playgroud)


小智 5

当我在处理多个文件/文件夹时,我通常使用os.walk:

import os
for root, dirs, files in os.walk(dir):
   for fname in files:
       do_something(fname) 
Run Code Online (Sandbox Code Playgroud)

从getopt或optparse获取您的目录.此外,如果需要,可以使用os.path.abspath构建绝对路径.

current_file = "%s%s%s" % (os.path.abspath(root), os.path.sep, fname)
do_something(current_file)
Run Code Online (Sandbox Code Playgroud)