【问题标题】:Loop over file list into dictionary; based on string将文件列表循环到字典中;基于字符串
【发布时间】:2015-12-11 15:51:26
【问题描述】:

我在一个库中有一堆 .csv 文件,我想提取它们的内容(它们是 NxM 矩阵)并将它们放入字典中。它们的大小都相同,通常命名为 {means1, mean2, ...} 和 {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. 提取名称;在这种情况下,“手段”和“轨迹”
  2. 根据每个名称创建一个字典,即means_dict = {}
  3. 用相关的 .csv 文件填充字典。例如。最后得到类似means_dict['0'] = ('means0.csv') 等的东西。

希望这是有道理的!

【问题讨论】:

  • 您能发布您尝试过但没有成功的方法吗?
  • 使用 csv 模块提取内容。这是一个link关于如何使用基础知识

标签: python csv dictionary pandas filelist


【解决方案1】:

你真的,真的不想动态创建字典。相反,使用包含键的字典作为“手段”、“轨迹”等,将值作为文件列表:

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)

【讨论】:

  • 你应该取group(1),group(0)总是完整的字符串。
  • 在这种情况下它们是相同的,但你是对的,谢谢 - 已更正。
  • 现在才看到你的回答。为什么我不想使用动态字典?
  • 是的,我也想知道它们为什么不好,defaultdict 所做的只是在给定键不存在时初始化字典,这与自己初始化是一样的吗?
  • 我没有说字典有问题。我说过你不想动态地创建它们。坦率地说,我不明白为什么有人甚至想这样做。一旦你完成了,你如何引用它们?你怎么知道你有多少或他们叫什么?相反,字典是一个显式容器,将事物的名称映射到它们的内容。
【解决方案2】:

您可以使用这样的动态字典:

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']}

【讨论】:

  • 开箱即用,效果很好。谢谢。
猜你喜欢
  • 2023-01-31
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2014-07-06
相关资源
最近更新 更多