Python检查列表中是否存在列

时间:2013-08-22 13:39:30

标签: python python-3.x

我是一名初学程序员,编写Python脚本,最终需要提取三列内容并将其写入新的文本文件。在测试脚本时,我不断收到错误:IndexError: list index out of range应用于我需要提取的第三列。

我的代码:

for ip in open("list.txt"):
    with open(ip.strip()+".txt", "a") as ip_file:
        for line in open("data.txt"):
            new_line = line.split(" ")
            if "blocked" in new_line:
                if "src="+ip.strip() in new_line:
                    ip_file.write(", " + new_line[11])
                    ip_file.write(", " + new_line[12])
                    ip_file.write(", " + new_line[14] + "\n")

data.txt的一些行中,没有第15列。我已经尝试了几种方法来避免错误消息,但我仍然得到错误:

if "src="+ip.strip() in new_line:
    ip_file.write(", " + new_line[11])
    ip_file.write(", " + new_line[12])
    if new_line[14] is None:
        pass
    else:
        ip_file.write(", " + new_line[14] + "\n")

if "src="+ip.strip() in new_line:
    ip_file.write(", " + new_line[11])
    ip_file.write(", " + new_line[12])
    if not new_line[14]:
        pass
    else:
        ip_file.write(", " + new_line[14] + "\n")

问题:是否有其他方法可以检查列是否存在,如果不存在则忽略?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用try-except

ip_file.write(", " + new_line[12])
try:
    ip_file.write(", " + new_line[14] + "\n")
except IndexError:
    pass

通过执行if new_line[14] is Noneif not new_line[14],您尝试检查第14个索引处存在的值,但是在python中如果没有这样的索引则会引发IndexError

(对于不存在的索引,返回类似javascript undefined的语言,但python不是这种情况)

答案 1 :(得分:0)

错误是由查找本身(new_line[14])引起的,因此您必须检查行的长度,如if len(new_line) > 12。另一种方法是处理IndexError异常 - 两者都很好,通常程序员可以决定使用哪种方法。见"Ask forgiveness not permission" - explain

答案 2 :(得分:0)

使用try可以避免您的例外。

try:
    ip_file.write(", " + new_line[11])
except IndexError:
    pass   
try:
    ip_file.write(", " + new_line[12])
except IndexError:
    pass
try:
    ip_file.write(", " + new_line[14])
except IndexError:
    ip_file.write("\n")

当您进行比较以查看它是否存在时,您获得了一个超出范围的索引异常。

注意:
这可能不是您想要做的,因为每列可能是唯一的并包含特定信息。如果缺少第2列,则此代码将不会按预期运行。我们需要知道列中的内容可以帮助您。