编写一个程序来读取 mbox-short.txt 并计算出每条消息按一天中的小时分布

问题描述 投票:0回答:8

10.2 编写一个程序来读取 mbox-short.txt 并计算出每条消息按一天中的小时分布。您可以通过查找时间然后使用冒号再次分割字符串来从“From”行中提取小时。 来自 [电子邮件受保护] 2008 年 1 月 5 日星期六 09:14:16 累积每小时的计数后,打印出计数,按小时排序,如下所示。

我的代码:

fname = input("Enter file:")
fhandle = open(fname)
dic={}
for line in fhandle:
    if not line.startswith("From "):
        continue
    else:
        line=line.split()
        line=line[5]  # accesing the list using index and splitting it 
        line=line[0:2]
    for bline in line:
        dic[bline]=dic.get(bline,0)+1   # Using this line we created a dictionary having keys and values
#Now it's time to access the dictionary and sort in some way.
lst=[]
for k1,v1 in dic.items(): # dictionary er key value pair access korar jonno items method use kora hoyechhe
    lst.append((k1,v1)) # dictionary er keys and corresponding values ke lst te append korlam
lst.sort()   #lst take sort korlam. sorting is done through key
#print(lst)
for k1,v1 in lst:  # we are able to access this list using key value pair as it was basically a dictionary before, It is just appended
    print(k1,v1)

#print(dic)
    #print(dic)

所需输出:

04 3
06 1
07 1
09 2
10 3
11 6
14 1
15 2
16 4
17 2
18 1
19 1

我的输出:

enter image description here

我不明白出了什么问题。

python arrays list dictionary tuples
8个回答
1
投票

工作代码。尽可能将代码分解为简单的形式。这样你就很容易理解了。

d = dict()
lst = list()

fname = input('enter the file name : ')
try:
    fopen = open(fname,'r')
except:
    print('wrong file name !!!')

for line in fopen:
    
    stline = line.strip()
    
    if stline.startswith('From:'):
        continue
    elif stline.startswith('From'):
        spline = stline.split()
        
        time = spline[5]
        tsplit = time.split(':')
        
        t1 = tsplit[0].split()
        
        for t in t1:
            if t not in d:
                d[t] = 1
            else:
                d[t] = d[t] + 1

for k,v in d.items():
    lst.append((k,v))
lst = sorted(lst)

for k,v in lst:
    print(k,v)






        




       

0
投票
    name = input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
emailcount = dict()
for line in handle:
    if not line.startswith("From "): continue
    line = line.split()
    line = line[1]
    emailcount[line] = emailcount.get(line, 0) +1
bigcount = None
bigword = None
for word,count in emailcount.items():
    if bigcount == None or count > bigcount:
        bigcount = count
        bigword = word
print(bigword, bigcount)

0
投票
name = input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)

counts = {}
for line in handle:
    word = line.split()
    if len(word) < 3 or word[0] != "From" : continue
    full_hour = word[5]
    hour = full_hour.split(":")
    hour = str(hour[:1])
    hour = hour[2:4]
    if hour in counts :
        counts[hour] = 1 + counts[hour]
    else :
        counts.update({hour:1})
lst = list()
for k, v in counts.items():
    new_tup = (k, v)
    lst.append(new_tup)
 
lst = sorted(lst)    
for k, v in lst:
    print(k,v)

0
投票
counts=dict()
fill=open("mbox-short.txt")
for line in fill :
    if line.startswith("From "):
        x=line.split()
        b=x[5]
        y=b.split(":")
        f=y[0]
        counts[f]=counts.get(f,0)+1
l=list()
for k,v in counts.items():
    l.append((k,v))
l.sort()
for k,v in l:
    print(k,v)

0
投票

我在线课程中认真听讲,这是我在课堂上学到的代码。我想你会很容易理解的。

fn = input('Please enter file: ')
if len(fn) < 1: fn = 'mbox-short.txt'
hand = open(fn)

di = dict()

for line in hand:
    ls = line.strip()
    wds = line.split()
    if 'From' in wds and len(wds) > 2:

        hours = ls.split()
        hour = hours[-2].split(':')
        ch = hour[0]

        di[ch] = di.get(ch, 0) + 1

tmp = list()
for h,t in di.items():
    newt = (h,t)
    tmp.append(newt)

tmp = sorted(tmp)
for h,t in tmp:
    print(h,t)

0
投票
name = input("Enter file:")
if len(name) < 1:
    name = "mbox-short.txt"
handle = open(name)

counts = dict()

for line in handle:
    line = line.strip()
    if not line.startswith("From ") : continue
    line = line.split()
    hr = line[5].split(":")
    hr = hr[0:1]
    for piece in hr:
        counts[piece] = counts.get(piece,0) + 1


lst = list()

for k,v in counts.items():
    lst.append((k,v))
lst = sorted(lst)

for k,v in lst:
    print(k,v)

0
投票
# ask the user for a filename
file_name = input('Enter a filename: ')
# to facilitate testing, I don't want to type filename each time
if len(file_name) < 1: file_name = 'mbox-short.txt'
# try opening the file
try:
    file_handle = open(file_name)
# if file can't be opened, terminate.
except:
    print('Invalid File')
    quit()
# histogram for the hours
counts = dict()
# loop through each line in the file
for line in file_handle:
    # make each line a list of words
    words = line.rstrip().split()
    # if the line is empty, skip it
    if len(words) == 0:
        continue
    # if the line starts with from
    if words[0] == 'From':
        # time string is always at index 5
        timeStr = words[5]
        # find the col position
        colPos = timeStr.find(':')
        # hour would be anything before the col position
        hours = timeStr[:colPos]
        # populate the histogram: if hour is present, increment its value, if not add it to histogram
        counts[hours] = counts.get(hours, 0) + 1
# create a new sorted list in asc. order, based on hour, and append tuples as (hour, value) for every (hour, value) pair
temp_list = sorted([(k, v) for (k, v) in counts.items()])
# print the hour and its value
for (k, v) in temp_list:
    print(k, v)

-1
投票
fname = input("Enter file:")
fhandle = open(fname)
dic={}
for line in fhandle:
    if not line.startswith('From '):
        continue
    else:
        line=line.split()
        line=line[5]  # accesing the list using index and splitting it
        line=line.split(':')
        bline=line[0]
    #for bline in line:
        #print(bline)
        dic[bline]=dic.get(bline,0)+1   # Using this line we created a     
dictionary having keys and values
#Now it's time to access the dictionary and sort in some way.
lst=[]
for k1,v1 in dic.items(): # dictionary er key value pair access korar     jonno items method use kora hoyechhe
    lst.append((k1,v1)) # dictionary er keys and corresponding values ke         lst te append korlam
lst.sort()   #lst take sort korlam. sorting is done through key
#print(lst)
for k1,v1 in lst:  # we are able to access this list using key value pair     as it was basically a dictionary before, It is just appended
    print(k1,v1)

#print(dic)
    #print(dic)
© www.soinside.com 2019 - 2024. All rights reserved.