python split string IndexError

时间:2011-10-26 01:40:54

标签: python string

import fileinput

for line in fileinput.input("emaillist.txt"):
        line=line.rstrip('\n\r ')
        line= line.split('=')
        newlin = line[1]

为什么这无效?我试图打破令人讨厌的文本行并从中做出一些有用的东西? split()函数是否产生一个列表,你可以通过列表[x]?

来解决

感谢!!!!

Traceback (most recent call last):
  File "./clean.py", line 8, in <module>
    newlin = line[1]
IndexError: list index out of range

3 个答案:

答案 0 :(得分:4)

如果line.partition('=')[2]有时缺失,您可以使用'='

>>> 'a = b'.partition('=')
('a ', '=', ' b')
>>> 'a'.partition('=')
('a', '', '')

将其与split()

进行比较
>>> 'a = b'.split('=')
['a ', ' b']
>>> 'a'.split('=')
['a']

答案 1 :(得分:1)

  

split()函数是否产生一个列表,你可以通过list [x]?

来解决

是。但是,如果列表只有一个元素,那么除了0之外,你不能用非负数作为索引。

>>> 'foo'.split('=')
['foo']

答案 2 :(得分:0)

尝试检查线路首先分成多少部分:

import fileinput

for line in fileinput.input("emaillist.txt"):
    line = line.rstrip('\n\r ').split('=')
    if len(line) > 1:
        newline = line[1]
        # ...
    else:
        # do something else...

或者,在1行([line.rstrip('\n\r ').split('=')[1] for line in fileinput.input("emaillist.txt") if len(line.rstrip('\n\r ').split('=')) > 1])中:

emaillist.txt:

  

Email1 = 123@bob.com
  email2=abc@123.com

emails = [line.rstrip('\n\r ').split('=')[1] for line in fileinput.input("emaillist.txt") if len(line.rstrip('\n\r ').split('=')) > 1]
print emails
['123@bob.com', 'abc@123.com']