【问题标题】:Group list of files by half hour interval in python在python中按半小时间隔对文件列表进行分组
【发布时间】:2019-07-01 05:23:27
【问题描述】:

我使用的是 python 2.7, 我的文件夹中有一个文件列表,有数千个文件,如下所示:

20180828-024308.dat
20180828-024434.dat
20180828-030335.dat
20180828-032114.dat
20180828-040041.dat
..........

它们是年、月、日、小时、分钟和秒

我想将所有这些文件分组为半小时间隔,(注意:年月日没有变化)

我想要这样的东西:

1: [20180828-024308.dat,20180828-024434.dat]
2: [20180828-030335.dat,20180828-032114.dat]
3: [20180828-040041.dat,....]
.......

我认为列表适合我,或者数据框可能。

感谢您的帮助!

【问题讨论】:

  • 你能展示一下你尝试过的东西吗
  • @我在 3:30-4 之间没有看到文件,所以该组的列表将为空,对吧?

标签: python pandas list dataframe group-by


【解决方案1】:

来自:- 我的理解, 假设您的数据框如下所示:

print(df)

                 files
0  20180828-024308.dat
1  20180828-024434.dat
2  20180828-030335.dat
3  20180828-032114.dat
4  20180828-040041.dat

df['file_time']= pd.to_datetime(df['files'].str.split('.dat').str[0])
df.groupby([pd.Grouper(key='file_time',freq='1800s')])['files'].apply(list).reset_index()

输出:

            file_time                                       files
0 2018-08-28 02:30:00  [20180828-024308.dat, 20180828-024434.dat]
1 2018-08-28 03:00:00  [20180828-030335.dat, 20180828-032114.dat]
2 2018-08-28 03:30:00                                          []
3 2018-08-28 04:00:00                       [20180828-040041.dat]

注意:由于 3:30-4 范围内没有文件,因此列表为空。

【讨论】:

    【解决方案2】:

    我认为您也可以通过基本编程来实现这一点。 所以首先使用 os 库加载所有文件,然后使用 python 获取文件列表。 这是我想说的sn-p

    import os
    
    folderPath = '/somepath'
    filesInFolder = os.listdir(folderPath)
    mapOfsimmilarFiles = {}
    keyForMaps = 0
    for fileNames in sorted(filesInFoldeyr):
        timePartOfFile = fileNames.split('-')[-1].split('.dat')[0]
        hr = timePartOfFile[0:2]
        min = timePartOfFile[2:4]
        sec = timePartOfFile[4:]
        if len(mapOfsimmilarFiles.keys()) == 0:
            mapOfsimmilarFiles[hr+'_'+min] = [fileNames]
        else:
            minsPresentInMaps = mapOfsimmilarFiles.keys()
            hrPresent = [int(h.split('_')[0]) for h in mapOfsimmilarFiles]
            minPresent = [(h.split('_')[1]) for h in mapOfsimmilarFiles]
            for timeUsed in minsPresentInMaps:
                hrPresent = timeUsed.split('_')[0]
                minPresent = timeUsed.split('_')[1] 
                if abs(int(hrPresent)-int(hr)) == 1:
                    if abs(int(minPresent)-int(min)) <=30:
                        mapOfsimmilarFiles[timeUsed].append(fileNames)
                    else:
                        #same hr but not 30mins so add to map as a new entry
                        mapOfsimmilarFiles[hr+'_'+min] = [fileNames]
                    break
            mapOfsimmilarFiles[hr+'_'+min] = [fileNames]            
    

    我希望这能帮助您并引导您朝着正确的方向前进。

    【讨论】:

      【解决方案3】:

      首先将您的数据转换为 dict,然后相应地加入这些字符串。

      代码:

      d = ['20180828-024308.dat', '20180828-024434.dat', '20180828-030335.dat', '20180828-032114.dat', '20180828-040041.dat']
      
      output = {}
      
      for i in d:
          key = i.split('-')[0]
          key1 = i.split('-')[1]
          # print(output)
          if key in output:
      
              if key1[0:2] in output[key]:
      
                  output[key][key1[0:2]].append(key1[2:])
              else:
                  output[key][key1[0:2]] = [key1[2:]]
          else:
              output[key] = {}
              output[key][key1[0:2]] = [key1[2:]]
      
      print(output)
      # print("_".join("{}_{}".format(k, v) for k, v in output.items()))
      main_output = []
      for i in output.keys():
          temp = []
          for j in output[i].keys():
              # [s + mystring for s in mylist]
              temp.append([i + '-' + j + s for s in output[i][j]])
          main_output.extend(temp)
      
      print(main_output)
      

      输出:

      {'20180828': {'02': ['4308.dat', '4434.dat'], '03': ['0335.dat', '2114.dat'], '04': ['0041.dat']}}
      [['20180828-024308.dat', '20180828-024434.dat'], ['20180828-030335.dat', '20180828-032114.dat'], ['20180828-040041.dat']]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2017-02-26
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多