Python разделить строку IndexError - PullRequest
0 голосов
/ 26 октября 2011
import fileinput

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

почему это недействительно? Я пытаюсь разбить отвратительно выглядящую строку текста и сделать из нее что-то полезное? Разве функция split () не создает список, к которому вы можете обратиться через list [x]?

Спасибо !!!! * * 1004

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

Ответы [ 3 ]

4 голосов
/ 26 октября 2011

Вы можете использовать line.partition('=')[2], если иногда отсутствует '=':

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

Сравнить с split():

>>> 'a = b'.split('=')
['a ', ' b']
>>> 'a'.split('=')
['a']
1 голос
/ 26 октября 2011

Разве функция split () не создает список, к которому вы можете обратиться через список [x]?

Да.Но если в списке только один элемент, вы не можете проиндексировать его ничем, кроме 0.

>>> 'foo'.split('=')
['foo']
.
0 голосов
/ 26 октября 2011

Попробуйте проверить, сколько частей строка была разбита на первую:

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.comemail2=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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...