2013-03-14 123 views
0

我有一個目錄,其中有很多數據文件,但數據文件名有任意數字。例如從python文件名提取數字

data_T_1e-05.d 
data_T_7.2434.d 
data_T_0.001.d 

等等。由於文件名稱中的小數,因此不會根據數字的值進行排序。我想要做的是以下幾點: 我想打開每個文件,從文件名中提取數字,將其放入數組中,並使用數據進行一些操作。示例:

a = np.loadtxt("data_T_1e-05.d",unpack=True) 
res[i][0] = 1e-05 
res[i][1] = np.sum[a] 

我想通過運行循環來爲每個文件執行此操作。我認爲可以通過創建一個包含所有文件名的數組(使用import os)然後對其進行操作來完成。 怎麼辦?

回答

6

如果你的文件全部以相同的前綴和相同的後綴結尾,只需切片,並傳遞給float()

number = float(filename[7:-2]) 

這消除了前7個字符(即data_T_)和最後2(.d )。

這對於你的榜樣文件名工作正常:

>>> for example in ('data_T_1e-05.d', 'data_T_7.2434.d', 'data_T_0.001.d'): 
...  print float(example[7:-2]) 
... 
1e-05 
7.2434 
0.001 
+0

非常感謝,這肯定會幫助,但我在目錄中有許多文件,應該有一種方法可以在陣列中的所有文件名自動使用'os'庫。你能告訴我如何? – lovespeed 2013-03-14 20:04:24

+1

@SthitadhiRoy:['os.listdir()'](http://docs.python.org/2/library/os.html#os.listdir)返回一個目錄中的文件名列表。請記住使用'os.path.join(路徑,文件名)'將它們變成絕對路徑。 – 2013-03-14 20:13:16

1
import os 
# create the list containing all files from the current dir 
filelistall = os.listdir(os.getcwd()) 
# create the list containing only data files. 
# I assume that data file names end with ".d" 
filelist = filter(lambda x: x.endswith('.d'), filelistall) 
for filename in filelist: 
    f = open(filename, "r") 
    number = float(filename[7:-2]) 
    # and any other code dealing with file 
    f.close() 
+0

+1我覺得這段代碼很好 – eyquem 2013-03-19 16:05:00