Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python获取部分文件名_Python_Filenames - Fatal编程技术网

用Python获取部分文件名

用Python获取部分文件名,python,filenames,Python,Filenames,我是新手 我刚刚用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_3;”之后和文件扩展名之前抓取字符串 你能告诉我哪些Pytho

我是新手

我刚刚用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_3;”之后和文件扩展名之前抓取字符串


你能告诉我哪些Python模块和可能的指南可以帮助我吗?

如果数字是可变长度的,你会想要regex模块“re”

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


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

如果数字长度可变,则需要正则表达式模块“re”

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


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

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

import os
filenames = os.listdir(path)
现在,您可以迭代文件名列表,并使用正则表达式查找所需的模式:

import re
for filename in filenames:
    m = re.search('(?<=ID_)\w+', filename)
    print (m)
重新导入
对于文件名中的文件名:

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

import os
filenames = os.listdir(path)
现在,您可以迭代文件名列表,并使用正则表达式查找所需的模式:

import re
for filename in filenames:
    m = re.search('(?<=ID_)\w+', filename)
    print (m)
重新导入
对于文件名中的文件名:

m=re.search(“(?您可能希望使用glob,它是用于文件全局绑定的python模块。在python帮助页面中,用法如下所示:

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

您可能想使用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']

下面是一个使用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模块的简单解决方案,如其他答案中所述

# 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()
等解决方案同样有效、有用且具有指导意义):


这里还有另一种选择,使用
re.split()
,这可能更接近您正试图做的事情的精神(尽管使用
re.match()
re.search()
等解决方案同样有效、有用且有指导意义):


如果这些是字符串中唯一可以使用的数字,那么库是re ID=re.findall(r“[0-9]+”,*stringname”)如果这些是字符串中唯一可以使用的数字,那么库是re ID=re.findall(r“[0-9]+”,*stringname”)为了详细说明这一点,请看一看在中找到的正则表达式库,还有一些在网上流传的正则表达式备忘单,其中包括解释KCzar程序是如何工作的。为了详细说明这一点,请看一看在中找到的正则表达式库,还有一些正则表达式网上流传的备忘单,包括解释KCzar程序工作原理的备忘单。谢谢你的回答。我用一个实际的文件尝试了这一点,得到了这样的回答:
它似乎在某个位置找到了ID,但无法将其输出字符串。知道我做错了什么吗?为什么要将导入放在for lo中op?因为我写答案时没有注意;)。谢谢你的更正。编辑它。嗨,谢谢你的回答。我用一个实际的文件尝试了这个方法,得到了这样的回答:
它似乎在某个位置找到了ID,但无法让它输出字符串。你知道我做错了什么吗?为什么要将导入放在for循环中?因为我在编写时没有注意请回答;)。谢谢您的更正。请编辑它。