如何从Python中提取文件名中的数字?

Bor*_*lis 10 python

我只需从文件名中提取数字,例如:

GapPoints1.shp

GapPoints23.shp

GapPoints109.shp

如何使用Python从这些文件中提取数字?我需要把它合并到一个for循环中.

mgi*_*son 19

你可以使用正则表达式:

regex = re.compile(r'\d+')
Run Code Online (Sandbox Code Playgroud)

然后获取匹配的字符串:

regex.findall(filename)
Run Code Online (Sandbox Code Playgroud)

这将返回包含数字的字符串列表.如果你真的想要整数,你可以使用int:

[int(x) for x in regex.findall(filename)]
Run Code Online (Sandbox Code Playgroud)

如果每个文件名中只有1个数字,则可以使用regex.search(filename).group(0)(如果您确定它会产生匹配).如果未找到匹配项,则上面的行将生成一个AttributeError,表示该属性NoneType没有group.


jdo*_*dot 5

所以,你没有留下任何关于这些文件的位置以及如何获取这些文件的描述,但我假设您将使用该os模块获取文件名.

至于从名称中获取数字,你最好使用正则表达式re,如下所示:

import re
def get_numbers_from_filename(filename):
    return re.search(r'\d+', filename).group(0)
Run Code Online (Sandbox Code Playgroud)

然后,要在for循环中包含它,您将在每个文件名上运行该函数:

for filename in os.listdir(myfiledirectory):
   print get_numbers_from_filename(filename)
Run Code Online (Sandbox Code Playgroud)

或类似的规定.


kel*_*nfc 5

如果只有一个数字:

filter(lambda x: x.isdigit(), filename)
Run Code Online (Sandbox Code Playgroud)