2013-03-14 212 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