【发布时间】:2019-03-24 08:37:43
【问题描述】:
首先我想说这是一个练习的调试问题,但我无法从讲师那里得到任何帮助,而且我读过的论点我似乎看不到弄清楚,所以我在这里。所以我有一个 python 脚本来比较作为参数传递的 .txt 文件。目前叫法如下:
python compare.py -s stop_list.txt NEWS/news01.txt NEWS/news02.txt
文件被解析成一个名称列表使用
import sys, re, getopt, glob
opts, args = getopt.getopt(sys.argv[1:],'hs:bI:')
opts = dict(opts)
filenames = args
if '-I' in opts:
filenames = glob.glob(opts['-I'])
print('INPUT-FILES:', ' '.join(filenames))
print(filenames)
我可以通过简单地将两个以上的文件一起列出来传递两个以上的文件
python compare.py -s stop_list.txt NEWS/news01.txt NEWS/news02.txt NEWS/news03.txt NEWS/news04.txt
但这很快就会变得不切实际。
现在建议可以使用模式传递更多的文件
python compare.py -s stop_list.txt -I ’NEWS/news??.txt’
i.e.:
python compare.py -s stop_list.txt -I ’NEWS/news0[123].txt’
但是它的行为似乎有点奇怪。首先,如果我写:
python compare.py -s stop_list.txt -I NEWS/news01.txt NEWS/news02.txt
只有 news01.txt 会被传递给脚本。
以下,当使用建议的模式时,没有任何输入。我真的不明白解析输入文件的代码是错误的需要修改,还是我做错了什么。
-h 状态:
USE: python <PROGNAME> (options) file1...fileN OPTIONS: -h : print this help message -b : use BINARY weights (default: count weighting) -s FILE : use stoplist file FILE -I PATT : identify input files using pattern PATT, (otherwise uses files listed on command line)
提前致谢:)
【问题讨论】:
-
只是检查:那些特殊引号 -> ' 还是常规引号 -> ' ?它们看起来非常相似,但是如果是这种情况,Python 会将花哨的那些包含在您的字符串中。试试这个来测试:superuser.com/a/581529/717739
-
您的参数解析似乎只使用
-I之后的第一个参数作为模式。您需要将其标记为采用可变数量的参数,并可能迭代您获得的模式列表。或者传递一个包含你所有文件的模式(这是背后的意图)。 -
@oblio 他们不是 > '(简单)。另一方面,它只是从我们分发的 pdf 中复制粘贴,所以我不确定这是否是故意的,或者这只是它们被打印到 pdf 的方式。无论如何,如果我用 > ' 更改它们,我仍然没有得到任何输入。
-
@oblio 哦 ffs。显然它必须用双引号 " 调用。只是通过使用 "news0[123].txt" 随机运行来弄清楚。
-
@oblio 嘿,我只是想知道我应该读什么,因为我对从命令行传递参数等方面知之甚少。例如,这里使用的模式仅适用于 10 个文档01,02,03... 或 10,11,12... 如果您(可以理解地)厌倦了解释,您能给我一些关于看什么的建议吗?我不明白他是如何从 0[123] 到 01,02,03 的,我无法想象它如何扩展到 ...08,09,10,11...
标签: python arguments anaconda parameter-passing prompt