我正在编写一个简单的脚本,试图从.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)
我不明白为什么它显然不在范围之内.
我猜你的文件中有一个空行.如果它运行数据然后生成异常,则空行将位于文件的末尾.
请插入
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)