【问题标题】:reading Unix wild card filenames from command line in Python从 Python 中的命令行读取 Unix 通配符文件名
【发布时间】:2013-02-24 00:03:33
【问题描述】:

在 Python 中使用 optparse 处理 Unix 样式通配符参数的正确方法是什么?我有:

myscript.py:

from optparse import OptionParser
parser = OptionParser()
parser.add_option("--input", dest="input", default=None, nargs=1)
parser.add_option("--outdir", dest="outdir", default=None, nargs=1)
(options, args) = parser.parse_args()

我希望能够做到:

myscript.py --input *.txt --outdir mydir/

我不想读取与*.txt 匹配的所有文件的内容。我希望myscript.py 访问他们的文件名,因为某些脚本只是将文件名传递给其他程序,而无需打开/读取文件。如何获得一个返回文件名的迭代器,同时仍然允许在通配符友好选项(在本例中为 --input)之后传递其他参数,如 --outdir?谢谢。

【问题讨论】:

  • 您是否考虑到 UNIX shell 会自己扩展这个 glob?
  • @wRAR 如果他们扩展它,这是否意味着我通过了文件名列表?如果 *.txt 总是被翻译成 a.txt,b.txt,... 等等就没有问题了。但我不认为会发生这种情况
  • 是的,它将扩展为以空格分隔的文件名列表。
  • 注意:自 python 2.7 版起,不鼓励使用 optparse。 optparse 模块已弃用,不会进一步开发; argparse 模块将继续开发。请参阅PEP 0389 了解更多信息。

标签: python shell unix command-line optparse


【解决方案1】:

Unix shell 会将*.txt 扩展为单独的参数,然后再将它们传递给您的程序; Windows 的命令解释器不会。

假设您使用的环境没有先扩展它们——即调用python prog.py '*.txt',例如,您可以使用glob.glob() 自己进行扩展。

【讨论】:

  • 虽然需要单引号是不寻常的。我希望我的程序像其他 unix 实用程序一样工作。喜欢wc *.txt。用 glob 解析它似乎也很复杂——如果我传入一个包含 * 的文件名怎么办?如何判断它是要扩展的 glob 还是文件名的一部分?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2012-11-03
  • 2012-04-21
相关资源
最近更新 更多