Удалить адреса электронной почты из списка Python, используя .rstrip ("@") - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть список адресов электронной почты, и я хотел бы удалить все после "@".Мой код выглядит примерно так:

user_emails = ['me@organization.org', 'you@organization.org', name@organization.org'] emails = [user.rstrip("@") for user in user_emails]

Но ничего не меняется, когда я запускаю этот код.Когда я запускаю:

emails = [user.strip("@organization.org") for user in user_emails]

Символ @ удаляется, но и символ слева от него, что мне не подходит.

Что я должен сделать, чтобы удалить этого персонажа?

Спасибо за понимание.

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

rstrip удаляет только завершающие символы, см. ссылку здесь .Аргумент - это символы, которые нужно удалить.

Когда вы делаете user.rstrip("@"), ничего не происходит, потому что @ не в конце user, т. Е. Оно не заканчивается

0 голосов
/ 03 декабря 2018

rstrip("@") не работает, потому что справа от строки нет @.

rstrip("@organization.org") удаляет более @organization.org при наличии O, R, G, A, N, I, Z, T, O или N в конце части имени пользователя адреса электронной почты.Помните, что rstrip() (и его двоюродные братья) удаляют любые из перечисленных символов, а не предоставленную вами строку.

Распространенным решением является разделение на символ @ и взятиепервый элемент возвращаемого списка.

addresses = [addr.split("@", 1)[0] for addr in user_addresses]

(Именование важно. Я использовал user_addresses вместо user_email, потому что у вас нет электронной почты пользователей, у вас есть их электронная почта адреса.)

Общее решение создает (небольшой) временный список для каждого обработанного адреса.Эта память почти сразу же используется на следующей итерации, поэтому вряд ли она будет иметь серьезные негативные последствия.Тем не менее, если вы хотите избежать создания ненужных списков, вы можете использовать str.find(), чтобы найти @ и выделить часть домена.

addresses = [addr[:addr.find("@")] for addr in user_addresses]
0 голосов
/ 03 декабря 2018

Вам просто нужно разделить на '@' и взять первую часть:

user_emails = ['me@organization.org', 'you@organization.org', 'name@organization.org']
emails = [user.split("@")[0] for user in user_emails]

Если вы действительно хотите использовать .rstrip(), вы можете сделать:

emails = [user.rstrip("@organization.org") for user in user_emails]

Beосторожно с использованием .rstrip() здесь.Что-то вроде 'foo@organization.org'.rstrip("@organization.org") дает другой ответ.

.rstrip() удаляет символы с правого конца.

Например:

>>> 'asd@'.rstrip('@') 
asd
>>> 'asd@a'.rstrip('@')
asd@a
...