繁体   English   中英

使用Python抓取文件名的一部分

[英]Grab part of filename with Python

新手在这里。

我刚刚使用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”

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'

正则表达式通常用于匹配变量字符串。 我刚写的正则表达式说:

查找下划线(“ _”),后跟可变数量的数字(“ [0-9] +”),后跟字符串的最后一个句点(“ \\。[^ \\。] + $”)

这是使用其他答案中提到的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

祝好运!

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

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

您可以在python中使用os模块并执行listdir以获取该路径中存在的文件名列表,如下所示:

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,这是用于文件globbing的python模块。 在python帮助页面中,用法如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM