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

0 投票
5 回答
1106 浏览
提问于 2025-04-16 03:14

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

ls blah*.txt 

这会列出所有以“blah”开头并以“txt”结尾的文件。

我需要在我的Python脚本中实现类似的功能。

python myscript.py blah*.txt

这可能吗?如果可以的话,应该怎么做呢?

5 个回答

0

我觉得你想用 glob 这个工具。

3
import sys

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

在Unix系统中,命令行的参数会自动被处理,所以你不需要自己去处理这些参数。如果你需要依次处理一堆文件,可以看看fileinput模块。这个模块的工作方式类似于Perl中的“魔法ARGV”句柄,以及它的-n-i选项。它允许你逐行读取命令行中列出的每个文件的内容,还可以选择把原文件备份到一个新的名字,并把标准输出指向原文件名。这样你就可以简单地做一些事情,比如:

import fileinput

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

在命令行中每个文件的每一行前面添加行号,同时把原文件保存为filename.bak

1

这就是为什么你需要用到 sys.argv(别忘了要 import sys)。它会把你所有的 blah*.txt 文件名以列表的形式返回给你。

撰写回答