Python 在一组行上使用lstrip时,只有以';r';受到影响';r';被移除后,其他人保持不变吗

Python 在一组行上使用lstrip时,只有以';r';受到影响';r';被移除后,其他人保持不变吗,python,string,list,Python,String,List,我有一个包含一些电子邮件的文本文件。 所有这些都是以如下方式开始的: From: stephen.marquard@uct.ac.za From: louis@media.berkeley.edu From: zqian@umich.edu From: rjlowe@iupui.edu From: zqian@umich.edu From: rjlowe@iupui.edu From: cwen@iupui.edu From: cwen@iupui.edu From: gsilver@umich

我有一个包含一些电子邮件的文本文件。 所有这些都是以如下方式开始的:

From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu
From: cwen@iupui.edu
From: cwen@iupui.edu
From: gsilver@umich.edu
From: gsilver@umich.edu
From: zqian@umich.edu
From: gsilver@umich.edu
From: wagnermr@iupui.edu
From: zqian@umich.edu
From: antranig@caret.cam.ac.uk
From: gopal.ramasammycook@gmail.com
From: david.horwitz@uct.ac.za
From: david.horwitz@uct.ac.za
From: david.horwitz@uct.ac.za
From: david.horwitz@uct.ac.za
From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: louis@media.berkeley.edu
From: ray@media.berkeley.edu
From: cwen@iupui.edu
From: cwen@iupui.edu
From: cwen@iupui.edu
我的问题是获取唯一的电子邮件ID,所以我尝试-

fhand = open("mbox-short.txt")  
emails=[]
for line in fhand:
    if line.startswith("From:"):
        l=line.lstrip("From:").rstrip()
        emails.append(l) 
unique = []
for email in emails:
    if email not in unique:
        unique.append(email)
        print(email)
print("\nTotal Unique Contacts=",len(unique))
输出-

stephen.marquard@uct.ac.za
louis@media.berkeley.edu
zqian@umich.edu
rjlowe@iupui.edu
cwen@iupui.edu
gsilver@umich.edu
wagnermr@iupui.edu
antranig@caret.cam.ac.uk
gopal.ramasammycook@gmail.com
david.horwitz@uct.ac.za
ray@media.berkeley.edu
stephen.marquard@uct.ac.za
louis@media.berkeley.edu
zqian@umich.edu
jlowe@iupui.edu
cwen@iupui.edu
gsilver@umich.edu   
wagnermr@iupui.edu
antranig@caret.cam.ac.uk
gopal.ramasammycook@gmail.com
david.horwitz@uct.ac.za
ay@media.berkeley.edu
唯一联系人总数=11

正确答案是什么-

当我在lstrip(“From:”)中使用了一个额外的空格,因为实际的电子邮件在“From:”之后开始,这就是我得到的-

fhand = open("mbox-short.txt")  
emails=[]
for line in fhand:
    if line.startswith("From:"):
        l=line.lstrip("From: ").rstrip()
        emails.append(l) 
unique = []
for email in emails:
    if email not in unique:
        unique.append(email)
        print(email)
print("\nTotal Unique Contacts=",len(unique))
输出-

stephen.marquard@uct.ac.za
louis@media.berkeley.edu
zqian@umich.edu
rjlowe@iupui.edu
cwen@iupui.edu
gsilver@umich.edu
wagnermr@iupui.edu
antranig@caret.cam.ac.uk
gopal.ramasammycook@gmail.com
david.horwitz@uct.ac.za
ray@media.berkeley.edu
stephen.marquard@uct.ac.za
louis@media.berkeley.edu
zqian@umich.edu
jlowe@iupui.edu
cwen@iupui.edu
gsilver@umich.edu   
wagnermr@iupui.edu
antranig@caret.cam.ac.uk
gopal.ramasammycook@gmail.com
david.horwitz@uct.ac.za
ay@media.berkeley.edu
唯一联系人总数=11

因此,我们看到,从r开始的电子邮件会受到影响,就像它们的第一个字母一样,从输出中消失,而其他邮件则根本不会受到影响。 请帮助我理解为什么会发生这种情况。 谢谢

使用
str.split()
amd然后访问第一个元素。您还可以使用
获取所有唯一的电子邮件

Ex:

emails = set()
with open("mbox-short.txt") as fhand:
    for line in fhand:
        if line.startswith("From:"):
            emails.add(line.strip().split()[1])

print(emails)
print("\nTotal Unique Contacts=",len(emails))

您可以使用
re
获取这些邮件:


进口稀土
将open(“mbox short.txt”,“r”)作为f:
电子邮件=列表(集合(关于findall(r'[\w\.]+@[\w\.]+',f.read()))

让我们从以下文档开始:

str.lstrip([chars])

返回删除前导字符的字符串副本。chars参数是一个字符串,指定要删除的字符集

这表示代码的以下部分:

line.lstrip("From: ")
删除所有出现的
F
r
o
m
以及从左侧开始的空格,直到找到另一个字符为止。一些例子:

>>> "From: rrabc@example.com".lstrip("From: ")
'abc@example.com'
>>> "From: morF@example.com".lstrip("From: ")
'@example.com'
>>> "  mmmrrroooFFF: x@example.com".lstrip("From: ")
'x@example.com'

谢谢!我现在明白了!因此,当我使用“From:”时,它会在遇到的第一个空格处停止,因为“”不在剥离条件内,但当我尝试使用“From:”时,空格会被删除,然后跳转到下一个字符,在我的例子中是“r”,因此会将其剥离。