我有一个60多年来天气数据的文本文件,如下所示:(如果它搞砸了只是复制到文本文件中!)
Stnr Dato DD06 DD12 DD18 FFM FXM POM TAM UUM
50540 07.01.1957 150 170 170 6.2 8.8 1010.6 6.3 94
50540 08.01.1957 160 160 200 7.2 9.8 1001.8 8.0 99
50540 09.01.1957 290 200 160 8.1 13.3 990.2 5.7 91
我想编写一个从该文件中读取数据的函数 一年,用户确定年份,我该怎么做?然后在新文件中为每个月的FFM和TAM写入avg值。
答案 0 :(得分:2)
这看起来像.csv
个文件,或者更具体地说是tab delimited file
。
我建议将文件读入某些python数据格式,列表或字典, 然后在日期列中进行搜索。
过程是:
我分别用字典,下面的data_to_python
方法和方法search_by_year
回答了这些步骤。
这是我的粗略尝试,测试输出如下......
def data_to_python(data_file_name):
with open(data_file_name,'r') as f:
data = []
first = True
for line in f:
if first:
first = False
datanames = line.split('\t')
else:
temp = {}
for i,item in enumerate(line.split('\t')):
temp[datanames[i]] = item
data.append(temp)
return data
def searchByYear(data,year):
temp = []
for entry in data:
if entry['Dato'].endswith(str(year)):
temp.append(entry)
return temp
我将您提供的输入放入名为test.txt
示例输出:
>>> data = dataToPython('test.txt')
>>> searchByYear(data,1957)
[{'FFM': '6.2', 'DD18': '170', 'DD06': '150', 'Stnr': '50540', 'DD12': '170', 'FXM':'8.8', 'Dato': '07.01.1957', 'POM': '1010.6', 'UUM\n': '94\n', 'TAM': '6.3'}, {'FFM': '7.2', 'DD18': '200', 'DD06': '160', 'Stnr': '50540', 'DD12': '160', 'FXM': '9.8', 'Dato': '08.01.1957', 'POM': '1001.8', 'UUM\n': '99\n', 'TAM': '8.0'}, {'FFM': '8.1', 'DD18': '160', 'DD06': '290', 'Stnr': '50540', 'DD12': '200', 'FXM': '13.3', 'Dato': '09.01.1957', 'POM': '990.2', 'UUM\n': '91', 'TAM': '5.7'}]
>>> searchByYear(data,1956)
[]
答案 1 :(得分:1)
我建议使用csv.DictReader()将其视为csv文件。您可以指定delimiter ='\ t'(如果显示的文本文件有选项卡作为分隔符而不是空格)。你将循环遍历行,使用(datetime.datetime)strptime()确定适当的日期,格式为'%m。%d。%Y'
输入行从第一行获取字典键,然后累积数据并使用numpy获取每组数据的均值。您的输出文件可以使用cvs.DictWriter()和月份,FFM,TAM作为平均值。您可以使用matplotlib.pyplot按月创建值的映射,以查看它们如何使用chanege。例如,两种不同颜色的条形图。