2015-12-07 62 views
1

我試圖引入一系列文件 - 所有文件都具有相似的名稱,但具有不同的編號結尾,以便在函數中使用。Python - 使用open/np.load打開多個文件

我試圖使用與打開('文件'.....)作爲數據: 然後在他們工作,但我不確定是否有辦法做到這一點,而不需要手動全部。

有沒有辦法說,他們都模式匹配,所以我可以一個接一個地工作,但以同樣的方式?

回答

3

您可以glob找到的所有文件:

from glob import glob 
for fle in glob("path_to/foo*[0-9].whatever"): 
    # f = np.load... 
+1

哎呀...好像你3秒快:) – plonser

-1

你能做這樣的事嗎?

for filename in nameGeneration(): 
    with open(filename) as data: 
     doMyWork(data) 
0

是的。假設您所有的文件都被稱爲fileX.csv,其中X是1到10之間的數字。您可以這樣做。

import numpy as np 

storage = {} 
for i in range(1, 11): 
    fname = 'file{}.csv'.format(i) 
    storage[fname] = np.loadtxt(fname) 

然後你可以通過調用storage['file1.csv']來訪問你的數據。

或者你也可以嘗試字典理解。

storage = {'file{}.csv'.format(i):np.loadtxt('file{}.csv'.format(i)) 
      for i in range(1, 10)} 

這與上述相同。

0

我不認爲這可能是與開放功能的歸檔。它爲每個打開的文件返回一個文件對象,並且不可能將路徑列表傳遞給該函數。

你可以做的是定義一個帶有路徑或列表的列表來管理不同的文件對象。 (每個文件一個要打開)

paths = ['path_1','path_2','path_3'] 
files = [] 
for path in paths: 
    try: 
     files.append(open(path, <mode>)) 
    except IOError: 
     print "File: {}, couldn't be opened or doesn't exist".format(path) 

或者使用:

for path in paths: 
    try: 
     with open(path, <mode>) as myData: 
      my_function(myData) 
    except IOError: 
     print "File: {}, couldn't be opened or doesn't exist".format(path)