Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不知道如何通读这一行并找到所需的单词_Python_Python 3.x - Fatal编程技术网

Python 不知道如何通读这一行并找到所需的单词

Python 不知道如何通读这一行并找到所需的单词,python,python-3.x,Python,Python 3.x,我需要做的是: 编写一个程序,按一周中完成提交的哪一天对每封邮件进行分类。要做到这一点,请查找以“From”开头的行,然后查找第三个单词,并对一周中的每一天进行连续计数。在程序结束时,打印出词典的内容(顺序无关紧要) 我已经了解了文件搜索的基本知识,但我不知道如何让python搜索一行来查找一周中的某一天,然后将其添加到计数中。我尝试的方法返回一个错误 我使用Repl.it来运行python,它是python的v3。如果您需要在此处查看txt文件,请参阅 sat=0 太阳=0 mon=0 星期二

我需要做的是:

编写一个程序,按一周中完成提交的哪一天对每封邮件进行分类。要做到这一点,请查找以“From”开头的行,然后查找第三个单词,并对一周中的每一天进行连续计数。在程序结束时,打印出词典的内容(顺序无关紧要)

我已经了解了文件搜索的基本知识,但我不知道如何让python搜索一行来查找一周中的某一天,然后将其添加到计数中。我尝试的方法返回一个错误

我使用Repl.it来运行python,它是python的v3。如果您需要在此处查看txt文件,请参阅

sat=0
太阳=0
mon=0
星期二=0
wed=0
星期四=0
fri=0
尝试:
reletter=open('mbox.txt','r')
rd=reletter.readlines()
对于rd中的行:
#正在读取的行
lnLen=len(直线)
srch=line.startswith(“From”)
#仅当存在匹配项时才分析置信度值
如果srch!=-1:
dayOfWeek=''#值
如果srch中的“Sat”:
sat+=1
elif dayOfWeek==“Sun”:
太阳+=1
elif dayOfWeek==“周一”:
mon+=1
elif dayOfWeek==“星期二”:
星期二+=1
elif dayOfWeek==“Wed”:
wed+=1
elif dayOfWeek=='Thu':
星期四+=1
elif dayOfWeek=='Fri':
fri+=1
打印(“一周中的几天”)
打印(“星期六:”,星期六)
打印(“星期日:”,太阳)
例外情况除外,如e:
打印(e)
我也不介意为if语句提供一些帮助,我有这样做的倾向,我想知道一个更好的方法


结果应打印出一周中每天在文件中提及的满足所需条件的次数。例如,星期六:23

只需将rd循环中的行的
更改为:

对于rd中的行:
#仅检查以From开头的行
如果行开始于(“起始”):
#找到一天
如果“Sat”在同一行:
sat+=1
elif“Sun”在直线上:
太阳+=1
行中的elif“Mon”:
mon+=1
行中的“星期二”省略:
星期二+=1
如果“Wed”在同一行:
wed+=1
行中的“Thu”省略:
星期四+=1
行中的“Fri”省略:
fri+=1

使用正确的集合简化逻辑(这是我得到的关于编程的最重要建议)。在这种情况下,普通dict是一个合理的选择,它有很大帮助:

counts = {}

with open('mbox.txt') as fh:
    for line in fh:
        if line.startswith('From '):
            words = line.split()
            day = words[2]
            if day in counts:
                counts[day] += 1
            else:
                counts[day] = 1
但更好的选择是or:

fname=input('输入文件名:')

如果len(fname)
startswith
返回一个
bool
,该值仅为0或1,从不为-1。谢谢,这很有效,回答了我的两个问题!虽然这可能会回答问题,但如果可能的话,您应该在您的答案中包含此代码块如何回答问题的简要说明。这有助于提供上下文,并使您的答案对未来的读者更有用。
from collections import Counter

with open('mbox.txt') as fh:
    counts = Counter(line.split()[2] for line in fh if line.startswith('From '))
fname=input('Enter the file name: ') 
if len(fname)<1:
    fname='mbox.txt'
hand=open(fname)
di=dict()
for line in hand:
    words=line.rstrip().split()
    if len(words)<3 or words[0] != 'From':
        continue
    di[words[2]]=di.get(words[2],0)+1
print(di)
iread=input('enter the file name: ')
fread=open(iread)

oxford=dict()
for line in fread:
    if line.startswith('From '):
        nline=line.rstrip().split()
        word=nline[2]
        oxford[word]=oxford.get(word,0)+1
print(oxford)