Python字符串拆分时IndexError错误

0 投票
3 回答
1228 浏览
提问于 2025-04-17 05:00
import fileinput

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

为什么这个不合法呢?我想把那行看起来很糟糕的文字拆分开,做点有用的东西。split()函数不是会产生一个列表吗?我们可以通过list[x]来访问这个列表的内容吗?

谢谢!!!!

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

3 个回答

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...

或者,你可以用一行代码来实现([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']
1

split()函数不是会生成一个列表吗?你可以通过list[x]来访问它的元素吗?

没错。但是如果这个列表只有一个元素,那你只能用0来访问它,其他的非负数都不行。

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

如果有时候字符串中缺少'=',你可以使用line.partition('=')[2]来处理。

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

我们可以把它和split()方法进行对比:

>>> 'a = b'.split('=')
['a ', ' b']
>>> 'a'.split('=')
['a']

撰写回答