将文件列表循环到字典中;基于字符串

Loop over file list into dictionary; based on string

我在库中有一堆 .csv 文件,我想提取它们的内容(它们是 NxM 矩阵)并将它们放入字典中。它们的大小都相同,并且统称为 {means1, means2, ...} 和 {trajectories1, trajectories2, ...}。

这是我用来获取文件列表的代码

import os
import glob
my_dir = 'insert your own datapath'
filelist = []
os.chdir( my_dir )
for files in glob.glob( "*.csv" ) :
    filelist.append(files)

输出

['means0.csv',
 'means1.csv',
 'means2.csv',
 'trajectories0.csv',
 'trajectories1.csv',
 'trajectories2.csv']

我正在寻找一些代码

  1. 提取姓名;在这种情况下 "means" 和 "trajectories"
  2. 根据每个名字创建一个字典,即means_dict = {}
  3. 用相关的 .csv 文件填写字典。例如。以 means_dict['0'] = ('means0.csv') 等结尾。

希望它有意义!

你真的、真的不想动态创建字典。相反,使用包含键为 "means"、"trajectories" 等的包含字典,并将值作为文件列表:

from collections import defaultdict
import re

filedict = defaultdict(list)
for filename in glob.glob( "*.csv" ) :
    result = re.match(r'([^\d]+)', filename)
    if result:
        filedict[result.group(1)].append(filename)

你可以用这样的动态字典来做到这一点:

import os
import glob
import re
my_dir = 'whatever dir'

special_filelist = dict()

filelist = []
os.chdir( my_dir )
for files in glob.glob( "*.csv" ) :
    filelist.append(files)
    fileListName = re.match(r'(.*)[0-9]', files).group(1)
    if (fileListName not in special_filelist):
        special_filelist[fileListName] = []
    special_filelist[fileListName].append(files)


print special_filelist

在我自己的测试中给出了这个结果:

{'test': ['test2.csv', 'test0.csv', 'test1.csv'], 'else': ['else0.csv', 'else1.csv']}