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 に答える