与Python一起获取一部分文件名



newbie在这里。

我刚刚使用Python/编码了几天,但是我想创建一个脚本,抓住与某个模式相对应的文件名的一部分,并将其输出到文本文件中。

所以,就我而言,假设我有四个.pdf:

aaa_ID_8423.pdf
bbbb_ID_8852.pdf
ccccc_ID_7413.pdf
dddddd_ID_4421.pdf
(Note that they are of variable length.)

我希望脚本通过这些文件名,在" id_"之后抓住字符串,然后在文件名扩展名之前抓取字符串。

您能指向我指向哪个python模块以及可能有助于我的指南?

这是一个简单的解决方案,使用其他答案中提到的RE模块。

# Libraries
import re
# Example filenames. Use glob as described below to grab your pdf filenames
file_list = ['name_ID_123.pdf','name2_ID_456.pdf'] # glob.glob("*.pdf") 
for fname in file_list:
    res = re.findall("ID_(d+).pdf", fname)
    if not res: continue
    print res[0] # You can append the result to a list

及以下应该是您的输出。您应该能够适应其他模式。

# Output
123
456

goodluck!

这是使用re.split()的另一种选择,它可能更接近您要做的事情的精神(尽管使用re.match()re.search()的解决方案,等等,同样有效,同样有效,有用且具有启发性):

>>> import re
>>> re.split("[_.]", "dddddd_ID_4421.pdf")[-2]
'4421'
>>> 

如果数字是可变的长度,则您需要REGEX模块" RE"

import re
# create and compile a regex pattern
pattern = re.compile(r"_([0-9]+).[^.]+$")
pattern.search("abc_ID_8423.pdf").group(1)
Out[23]: '8423'

REGEX通常用于匹配可变字符串。我刚刚写的正则是:

找到一个下划线(" _"),然后是数字数量(" [0-9] "),然后在字符串中的最后一个阶段(" 。[^。] $"中的最后一个时期。)

您可以在python中使用OS模块,并执行列表dir以获取该路径中存在的文件名列表:

import os
filenames = os.listdir(path)

现在,您可以在文件名列表上迭代并查找使用正则表达式所需的模式:

import re
for filename in filenames:
    m = re.search('(?<=ID_)w+', filename)
    print (m)

上面的摘要将在ID_之后返回文件名的部分并将其打印出来。因此,就您的示例而言,它将返回4421.pdf,8423.pdf等。您可以编写类似的正则拨号以删除.pdf零件。

您可能想使用Glob,这是用于文件Globing的Python模块。从python帮助页面中,用法如下:

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

最新更新