将用户给出的一年中的平均天气数据写入文本文件

时间:2014-02-21 17:52:07

标签: python file text-files

我有一个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值。

2 个答案:

答案 0 :(得分:2)

这看起来像.csv个文件,或者更具体地说是tab delimited file

我建议将文件读入某些python数据格式,列表或字典, 然后在日期列中进行搜索。

过程是:

  1. 确定如何以可访问的方式存储数据。
  2. 提供创建此类数据集的方法。
  3. 提供搜索数据的方法。
  4. 我分别用字典,下面的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

    的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。例如,两种不同颜色的条形图。