.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
我做错了什么?
答案 0 :(得分: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)
答案 1 :(得分:1)
命令行参数默认为字符串,即使它们是数字。如果您需要将其用作列表的索引,则需要将其转换为数字,可能使用int
您的情况甚至更奇怪,您使用sys.argv [0]作为索引访问列表。请记住,sys.argv[0]始终是当前执行脚本的名称,并且在所有情况下都是非数字,非整数。我相信无论你提到sys.argv[1]
sys.argv[0]