Python列表索引超出了分割的返回值范围

ayl*_*ayl 5 python python-2.7

我正在编写一个简单的脚本,试图从.txt输入文件的第二列中提取第一个元素.

import sys

if (len(sys.argv) > 1):
    f = open(sys.argv[1], "r");
    print "file opened";

line = [];

for line in f:
    line = line.strip("\n ' '")
    line = line.split(",") 
    print line[1]

f.close();
Run Code Online (Sandbox Code Playgroud)

我的输入文件如下所示:

Client 192.168.1.13 said ``ACC: d0bb38f18da536aff7b455264eba2f1e35dd976f,389182.567,-0.042,-0.893,0.333''
Client 192.168.1.13 said ``ACC: d0bb38f18da536aff7b455264eba2f1e35dd976f,389182.590,-0.036,-0.905,0.273''
Client 192.168.1.13 said ``ACC: d0bb38f18da536aff7b455264eba2f1e35dd976f,389182.611,-0.046,-0.948,0.204''
Client 192.168.1.13 said ``ACC: d0bb38f18da536aff7b455264eba2f1e35dd976f,389182.631,-0.074,-0.978,0.170''
Client 192.168.1.13 said ``ACC: d0bb38f18da536aff7b455264eba2f1e35dd976f,389182.654,-0.100,-1.006,0.171''
Run Code Online (Sandbox Code Playgroud)

我希望我的分隔符是逗号.当我打印出行的长度时,我得到5个元素(如预期的那样).但是,每当我尝试索引列表以提取数据时(即,当我调用时print line[1]),我不断收到以下错误:

file opened
Traceback (most recent call last):
  File "stats.py", line 13, in <module>
    print line[1]
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它显然不在范围之内.

Lev*_*von 7

我猜你的文件中有一个空行.如果它运行数据然后生成异常,则空行将位于文件的末尾.

请插入

print len(line), line
Run Code Online (Sandbox Code Playgroud)

在你之前

print line[1]
Run Code Online (Sandbox Code Playgroud)

作为检查以验证是否是这种情况.

您始终可以使用此构造测试空行并仅处理/打印空行:

for line in f:
    line = line.strip()
    if line:
       # process/print line further
Run Code Online (Sandbox Code Playgroud)