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”,因此会将其剥离。