2015-09-15 50 views
-2

我在庫中有一堆.csv文件,我想提取它們的內容(它們是NxM矩陣)並將它們放入字典中。它們大小相同,通常命名爲{means1,means2,...}和{軌跡1,軌跡2,...}。將文件列表循環到字典中;基於字符串

這是代碼位我用它來獲取文件列表

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')等。

希望它是有道理的!

+0

你能張貼你已經嘗試了什麼,並沒有工作? –

+0

使用csv模塊提取內容。這裏是關於如何使用基礎知識的[鏈接](http://www.pythonforbeginners.com/systems-programming/using-the-csv-module-in-python/) – SirParselot

回答

2

你真的,真的不想動態創建字典。相反,使用含字典與鍵爲「裝置」,「軌跡」等等,和值作爲文件的列表:

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) 
+0

你應該把組(1),組( 0)始終是完整的字符串。 –

+0

在這種情況下,他們是一樣的,但你是對的,謝謝 - 糾正。 –

+0

現在只看到你的答案。爲什麼我不想使用動態字典? – TMorville

1

你可以用動態辭典這樣做:

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

工作得非常好,開箱即用。謝謝。 – TMorville

+0

您的歡迎:) –

相關問題