在Python中从文件名提取数字

0 投票
2 回答
6680 浏览
提问于 2025-04-17 19:08

我有一个文件夹,里面有很多数据文件,但这些文件的名字里有一些随意的数字。例如:

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 这个模块),然后再对这些文件名进行处理。

请问这该怎么做呢?

2 个回答

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。

比如说,有人可能会在使用某个特定的功能时,发现它没有按照预期工作。这时候,我们就需要去查找原因,看看是不是我们使用的方法不对,或者是工具本身存在一些限制。

在这种情况下,寻求帮助是很重要的。我们可以在一些技术论坛上提问,比如StackOverflow,那里有很多经验丰富的程序员愿意分享他们的知识和经验。

总之,编程的过程中难免会遇到各种各样的问题,但只要我们保持耐心,积极寻求解决方案,就一定能找到答案。

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()
8

如果你的文件名都是以相同的开头和结尾来命名的,那你可以简单地截取一下,然后传给 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

撰写回答