在python中处理任意数量的命令行参数

时间:2010-08-24 17:57:06

标签: python

我试图让我的脚本能够接受任意数量的文件名作为命令行参数。在Unix中,可以使用'*'键表示任何字符。例如,

ls blah*.txt 

将在开头列出每个文件,在结尾处列出txt。

我的python脚本需要这样的东西。

python myscript.py blah*.txt

这可能吗?如果是的话,怎么办呢?

5 个答案:

答案 0 :(得分:2)

import sys

for arg in sys.argv[1:]:
  print arg

在Unix-land中,shell执行全局扩展命令行参数的工作,因此您不需要自己执行此操作。如果你按顺序处理一堆文件,你也可以查看fileinput module,它的工作方式类似于Perl的“魔法ARGV”句柄以及-n-i标志。它允许您遍历命令行上命名的每个文件的每一行,可选择将文件移动到备份名称并打开stdout到文件的原始名称,这样您就可以执行以下操作:

import fileinput

for line in fileinput.input(inplace = True, backup = '.bak'):
  print fileinput.filelineno() + ": " + line

将行号添加到命令行上每个文件的每一行的开头,同时将原件保存为filename.bak

答案 1 :(得分:1)

这就是为什么你有sys.argv(并且不要忘记import sys)这会将你的所有blah*.txt作为文件名列表返回

答案 2 :(得分:0)

我想你想使用glob

答案 3 :(得分:0)

当您不想担心路径时,还有fnmatch

答案 4 :(得分:0)

import sys, glob
files = reduce(lambda x, y: x + y, (glob.glob(x) for x in sys.argv[1:]))