从python中的文件名字符串中提取数字

时间:2019-09-13 16:24:35

标签: python parsing

我在目录中有许多html文件。我正在尝试将文件名存储在一个列表中,以便以后可以将其与另一个列表进行比较。

例如:Prod224_0055_00007464_20170930.html是文件名之一。从文件名中,我要提取“ 00007464”并将此值存储在列表中,并对目录中的所有其他文件重复相同的操作。我该怎么做呢?我是Python的新手,我们将不胜感激!

如果您需要更多信息来回答问题,请告诉我。

3 个答案:

答案 0 :(得分:0)

您可以尝试执行此操作(假设您位于包含以下文件的文件夹中:

import os

num_list = []

r, d, files = os.walk( '.' ).next()
for f in files :
    parts = f.split('_')   # now `parts` contains ['Prod224', '0055', '00007464', '20170930.html']
    print parts[2]         # this outputs '00007464'
    num_list.append( parts[2] )

答案 1 :(得分:0)

假设文件具有某种模式,则可以使用正则表达式:

>>> import re
>>> s = 'Prod224_0055_00007464_20170930.html'
>>> desired_number = re.findall("\d+", s)[2]
>>> desired_number
'00007464'

使用正则表达式不仅可以帮助您获取所需的特定编号,还可以帮助您获取文件名中的其他编号。

如果文件名遵循“ [某些文本] [数字] _ [数字] _ [所需的数字] _ [日期] .html” 的格式,则此方法有效。得到编号后,我认为使用append方法将该编号添加到所需的任何列表将非常简单。

答案 2 :(得分:0)

将文件名放在下划线上,然后选择第三个元素(索引2)。

>>> 'Prod224_0055_00007464_20170930.html'.split('_')[2]
'00007464'

在可能如下所示的上下文中:

nums = [f.split('_')[2] for f in os.listdir(dir) if f.endswith('.html')]