目前,一名 Python 初学者正在寻求帮助。我正在从一个包含 365 行整数的文本文件中读取数据。每个整数代表一年中的一天。像这样,但对于 365 行:
1102
9236
10643
2376
6815
10394
3055
3750
4181
5452
10745
我需要检查整个文件并将 365 天分成 12 个月的每一天,然后取每个月的平均值。例如,前 31 行是一月,取平均值,打印它,然后从那里继续...
此时我已经编写了遍历整个文件的代码,并给出了一年的总数和每天的平均值,但我坚持将文件分成不同的月份并取单独的平均值。我该怎么做才能实现这一目标?
这是我当前的代码:
import math
def stepCounter ():
stepsFile = open("steps.txt", "r")
stepsFile.readline()
count = 0
for line in stepsFile:
steps = int(line)
count = count + steps
avg = count / 365
print(count, "steps taken this year!")
print("That's about", round(avg), "steps each day!")
stepsFile.close()
stepCounter()
我希望这个问题足够清楚。感谢您的帮助!
您必须知道每个月的天数。使用固定表,或者您可以询问 calendar
模块:
In [11]: months = [calendar.monthrange(2017, m)[1] for m in range(1, 13)]
In [12]: months
Out[12]: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
如果您决定使用固定表格,唯一感兴趣的月份是闰年的二月。如果calendar.isleap()
,你可以增加它是真的。
给定一个每行整数的打开文件,您可以简单地 slice适本地,将 int()
映射到切片上,并使用 statistics.mean()
:
In [17]: from statistics import mean
In [18]: from itertools import islice
In [19]: [mean(map(int, islice(the_file, mdays))) for mdays in months]
Out[19]: [15, 44.5, 74, 104.5, 135, 165.5, 196, 227, 257.5, 288, 318.5, 349]
the_file
只是
In [13]: from io import StringIO
In [14]: the_file = StringIO()
In [15]: the_file.writelines(map('{}\n'.format, range(365)))
In [16]: the_file.seek(0)
Out[16]: 0
我是一名优秀的程序员,十分优秀!