【问题标题】:group a bunch of files by day按天分组一堆文件
【发布时间】:2013-11-15 21:42:16
【问题描述】:

我在一个目录中确实有一堆包含大气测量值的文件。文件格式为 NetCDF。每个文件都有一个时间戳(变量“basetime”)。我可以读取所有文件并绘制单个测量事件(温度与高度)。 接下来我需要做的是“按天对文件进行分组”,并将一天中的所有测量值一起绘制在一个图中。不幸的是,我不知道该怎么做。 一种想法是使用下面代码中定义的变量“measurement_day”。 对于每一天,我通常确实有四个不同的文件,其中包含 temp.和海拔高度。 理想情况下,这四个不同文件的数据应该分组(例如用于绘图) 我希望我的问题很清楚。谁能帮帮我吗。

编辑:我现在尝试使用字典,但我无法确定一个测量日是否已经存在一个条目。请参阅下面的编辑代码

from netCDF4 import Dataset

data ={} # was edited

for f in listdir(path):
    if isfile(join(path,f)):
        full_path = join(path,f)
        f = Dataset(full_path, 'r')
        basetime = f.variables['base_time'][:]
        altitude = f.variables['alt'][:]
        temp = f.variables['tdry'][:]
        actual_date =  strftime("%Y-%m-%d %H:%M:%S", gmtime(basetime))
        measurement_day =  strftime("%Y-%m-%d", gmtime(basetime))
        # check if dict entries for day already exist, if not create empty dict  
        # and lists inside
        if len(data[measurement_day]) == 0:
             data[measurement_day] = {}
        else: pass
        if len(data[measurement_day]['temp']) == 0:
            data[measurement_day]['temp'] = []
            data[measurement_day]['altitude'] = []
        else: pass

我收到以下错误消息: Traceback(最近一次通话最后一次):...如果 len(data[measurement_day]) == 0: 键错误:'2009/05/28'

【问题讨论】:

  • 什么是Dataset?它来自哪里?
  • 在您回答 Ethan Furman 的问题之前,我们无法真正了解数据的结构,但是您是否尝试过使用 measurement_day 作为键来构建字典?你可以让每个值是一个变量列表,或者另一个字典(keys=altitude,temp,...),values = list of appropriate values
  • Dataset 是 Python 模块 NetCDF4 中的类。它是之前导入的(from NetCDF4 import Dataset)。也很抱歉忘记添加那行代码。
  • 所以您每天有四个不同的文件?这些文件中的每一个是否仅包含当天的数据?如果是这样,您可以使用 MFDataset() 打开所有四个,然后绘制数据。

标签: python netcdf


【解决方案1】:

谁能帮帮我。

我会努力的。虽然我并不完全清楚你已经拥有什么。

我可以读取所有文件并绘制单个测量事件 (温度与海拔高度)。接下来我需要做的是“将文件分组 按天”并将在一天中进行的所有测量一起绘制在 一个情节。

据此,我假设您知道如何在给定数据集列表的情况下绘制信息。要获取该数据集列表,请尝试以下操作。

from netCDF4 import Dataset

# a dictionary of lists that hold all the datasets from a given day
grouped_datasets = {}

for f in listdir(path):
    if isfile(join(path,f)):
        full_path = join(path,f)
        f = Dataset(full_path, 'r')
        basetime = f.variables['base_time'][:]
        altitude = f.variables['alt'][:]
        temp = f.variables['tdry'][:]
        actual_date =  strftime("%Y-%m-%d %H:%M:%S", gmtime(basetime))
        measurement_day =  strftime("%Y-%m-%d", gmtime(basetime))

        # if we haven't encountered any datasets from this day yet...
        if measurement_day not in grouped_datasets:
            # add that day to our dict
            grouped_datasets[measurement_day] = []

        # now append our dataset to the correct day (list)
        grouped_datasets[measurement_day].append(f)

现在您有了一个以measurement_day 为关键字的字典。我不确定你是如何绘制数据的,所以这是我所能得到的。希望对你有帮助,祝你好运。

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 2020-12-18
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多