3

私はPythonを学び、文字列関数を掘り下げようとしています。簡単な例として、私はこれを書きました

# example line
# username:*:231:-2:gecos field:/home/dir:/usr/bin/false

FILENAME = "/etc/passwd"

filehandle = open(FILENAME, 'r')

lines = filehandle.readlines()

for line in lines:
        line = line.rstrip()
        fields = line.split(':')
        print fields[0]

この例は毎回機能し、ユーザー名を教えてくれます。リストの最初のフィールド。

これも[0:6]で機能し、すべてのフィールドを出力します。[:1]はユーザー名も出力します。[-1]は最後のフィールドも出力します。

問題は、[1]、[-2]、[2]などがこのエラーになることです。

ファイル"splits.py"、16行目、印刷フィールド[-2] IndexError:リストインデックスが範囲外です

私はここで何か間違ったことをしていますか?ばかげていると思いますが、私が見ている例では、[1]、[2]などができると言っています。

/ etc / passwdであり、[0]と[-1]が機能するため、入力が混乱することはないと思います。

どうもありがとう。

4

1 に答える 1

1

おそらく最後に、ファイルにいくつかの空の行があるように聞こえます。

例:

>>>line = ''
>>>fields = line.split(":")
>>>print fields[0]
''
>>>print fields[-1]
''
>>>print fields[0:6]
''
>>>print fields[1]
IndexError: list index out of range

次のように修正できます。

for line in lines:        
    line = line.rstrip()
    fields = line.split(':')
    if len(fields) == 1:
        continue
    print fields[0]
于 2012-05-20T15:17:56.153 に答える