我不知道什么时候该写“if line.startswith('From:')”和“if not line.startswith('From')”

2024-04-20 13:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是一些作业中的问题:

编写一个程序,通读mbox-short.txt,找出谁发送的邮件数量最多。程序查找“发件人”行,并将这些行中的第二个字作为发送邮件的人。该程序创建一个Python字典,将发件人的邮件地址映射到文件中出现的次数计数。字典生成后,程序使用最大循环读取字典,以查找最多的提交者

这是解决此问题的代码之一(在线找到)。有人能解释一下我什么时候必须写“if line.startswith()”和/或“if not line.startswith()”,以及我们是否可以连续使用这两个代码

fname = input("Enter file:")
if len(fname) < 1 : name = "mbox-short.txt"
hand = open(fname)

lst = list()

for line in hand:
    if not line.startswith("From:"): continue
    line = line.split()
    lst.append(line[1])

counts = dict()
for word in lst:
    counts[word] = counts.get(word,0) + 1

bigcount = None
bigword = None
for word,count in counts.items(): 
    if bigcount is None or count > bigcount:
        bigcount = count
        bigword = word

print (bigword,bigcount)

Tags: in程序noneforif字典line邮件
1条回答
网友
1楼 · 发布于 2024-04-20 13:08:13

就我个人而言,我会使用if line.startswith('FROM'),因为它读起来更好,对于任务的目的来说更有意义

如果希望根据行的起始字符执行不同的操作,可以同时使用line.startswith()not line.startswith(),但在您的情况下,应该使用其中的一种

另外,我可能会指出,这并不是很像Python:

if len(fname) < 1 : name = "mbox-short.txt"

…尤其是len(fname) < 1。相反,我们应该使用Python中的空字符串是“falsy”这一事实,只需写:if not fname:。再一次,这读起来好多了

最后,您通常不应该像这样直接打开文件:

hand = open(fname)

因为之后你可能会忘记关上它(你已经关上了)。您应该使用with语句来代替PEP 343

相关问题 更多 >