0

.txt 文件包含 3 个字段,以逗号 (,) 分隔的文本、数字和一些特殊字符,仅运行一个for row in sortedlist: print row[1]示例就可以正常工作。

import csv
import operator
import sys

inf = csv.reader(open('data.txt','r'))
sortedlist = sorted(inf, key=operator.itemgetter(2), reverse=True)

def dothis(x):
    for row in sortedlist:
        print row[x]

if __name__ == "__main__":
    c = sys.argv[0]
    if (c == ''):
        raise Exception, "missing first parameter - row"
    dothis(c)

我收到以下错误 -

python test.py 1 Traceback (most recent call last):   File "test.py", line 16, in ?
    dothis(c)   File "test.py", line 10, in dothis
    print row[x] TypeError: list indices must be integers

我究竟做错了什么?

4

2 回答 2

2

在您显示的代码中,c因此x设置为sys.argv[0],这是一个字符串。您不能使用字符串来索引列表。

你的意思是说:

if __name__ == "__main__":
    if len(sys.argv) < 2:
        raise Exception, "missing first parameter - row"
    c = int(sys.argv[1])
    dothis(c)
于 2013-01-17T16:02:49.687 回答
1

命令行参数默认是字符串,即使它们是数字。如果您需要将其用作列表的索引,则需要将其转换为数字,可能与int

您的情况甚至更奇怪,您正在使用 sys.argv[0] 作为索引访问列表。请记住,sys.argv[0]始终是当前执行脚本的名称,并且在所有情况下都是非数字、非整数。我相信在所有情况下,你指的是sys.argv[1]你提到的任何地方sys.argv[0]

于 2013-01-17T16:06:58.270 回答