【发布时间】:2016-12-28 01:13:20
【问题描述】:
我的脚本需要一个选项后跟一个页面列表,指定为逗号分隔的范围列表,并处理扩展的页面列表。所以,例如,
script.py -a 2,4-6,9,10-13
应该得到列表
[2, 4, 5, 6, 9, 10, 11, 12, 13]
合作。目前我正在这样做:
import argparse
def getList(argument):
ranges = list(argument.split(","))
newRange = []
for theRange in ranges:
subRange = list(map(int, theRange.split("-")))
if (len(subRange) > 1):
newRange.extend(range(subRange[0], subRange[1] + 1))
else:
newRange.extend(subRange)
newRange.sort()
return newRange
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--pages", type=getList, dest="pages", default=[], help="pages to process")
args = parser.parse_args()
它可以工作,但我对这个 Python 东西比较陌生,想知道是否有更好的方法来做到这一点?
编辑:我不明白为什么它被标记为重复问题。 没有标记为重复的问题的答案与我上面描述的完全一致。这个想法不是处理一个简单的空格或逗号分隔的参数列表,而是更复杂的东西 - 一个必须扩展的范围列表。
【问题讨论】:
-
我同意,这些都不是一个好的副本。他们没有阅读你的问题。但如果这种处理有效,这是一个很好的解决方案。自定义
type是在argparse中执行此操作的唯一方法。 -
只要您的用户不想用空格分隔数字,这是最好的解决方案。