如何测试多个命令行参数(sys.argv

时间:2009-10-29 13:15:37

标签: python excel loops

我想在循环中测试多个命令行参数

> python Read_xls_files.py group1 group2 group3

此代码仅测试第一个(group1)。

hlo = []
for i in range(len(sh.col_values(8))):
   if sh.cell(i, 1).value == sys.argv[1]:
      hlo.append(sh.cell(i, 8).value)

我应该如何修改它,以便我可以针对这些参数中的一个,两个或所有参数进行测试?因此,如果在一个sh.cell(i,1)中有group1,则附加列表,如果有group1,group2等,则附加hlo。

6 个答案:

答案 0 :(得分:6)

您可以迭代sys.argv[1:],例如通过类似的东西:

for grp in sys.argv[1:]:
  for i in range(len(sh.col_values(8))):
   if sh.cell(i, 1).value == grp:
      hlo.append(sh.cell(i, 8).value)

答案 1 :(得分:3)

outputList = [x for x in values if x in sys.argv[1:]]

替换与您的(电子表格?)情况相关的位。这是list comprehension。您还可以调查自2.3以来标准库中的optparse模块。

答案 2 :(得分:2)

我建议看看Python的optparse模块。这是解析sys.argv的好帮手。

答案 3 :(得分:1)

argparse是另一个功能强大,易于使用的模块,可以为您解析sys.argv。对于创建命令行脚本非常有用。

答案 4 :(得分:0)

我相信这会有效,并且会避免迭代sys.argv:

hlo = []
for i in range(len(sh.col_values(8))):
   if sh.cell(i, 1).value in sys.argv[1:]:
      hlo.append(sh.cell(i, 8).value)

答案 5 :(得分:0)

# First thing is to get a set of your query strings.
queries = set(argv[1:])
# If using optparse or argparse, queries = set(something_else)
hlo = []
for i in range(len(sh.col_values(8))):
    if sh.cell(i, 1).value in queries:
        hlo.append(sh.cell(i, 8).value)

===对问题的回答结束===

除此之外:OP正在使用xlrd ......这里有几个性能提示。

使用这个简单的例子并不重要,但是如果要对单元格值进行大量基于坐标的访问,则可以通过使用Sheet.cell_value(rowx,colx)代替Sheet.cell(rowx,colx).value,可以动态构建Cell对象:

queries = set(argv[1:])
hlo = []
for i in range(len(sh.nrows)): # all columns have the same size
    if sh.cell_value(i, 1) in queries:
        hlo.append(sh.cell_value(i, 8))

或者您可以使用列表推导以及Sheet.col_values(colx)方法:

hlo = [
    v8
    for v1, v8 in zip(sh.col_values(1), sh.col_values(8))
    if v1 in queries
    ]