我试图让我的脚本能够接受任意数量的文件名作为命令行参数。在Unix中,可以使用'*'键表示任何字符。例如,
ls blah*.txt
将在开头列出每个文件,在结尾处列出txt。
我的python脚本需要这样的东西。
python myscript.py blah*.txt
这可能吗?如果是的话,怎么办呢?
答案 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:]))