所以我有一个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)
| 归档时间: |
|
| 查看次数: |
24263 次 |
| 最近记录: |