Python Glob 正则表达式文件搜索,从多个匹配项中搜索单个结果
Python Glob regex file search with for single result from multiple matches
在 Python 中,我试图在目录中查找特定文件,比方说,'file3.txt'。目录中的其他文件是 'flie1.txt'、'File2.txt'、'file_12.txt' 和 'File13.txt'。该号码是唯一的,因此我需要按用户提供的号码进行搜索。
file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + f'{file_num} + '.txt')
问题是,returns 'file3.txt' 和 'File13.txt'。如果我尝试向后看,我没有得到任何文件:
file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + r'(?<![1-9]*)' + f'{file_num}' + '.txt')
我如何只得到'file3.txt'?
glob
接受 Unix 通配符,而不是正则表达式。那些功能不那么强大,但您仍然可以实现您的要求。这个:
glob.glob("/path/to/file/*[!0-9]3.txt")
过滤掉前面没有数字的3个文件
对于其他情况,您可以使用列表理解和正则表达式:
[x for x in glob.glob("/path/to/file/*") if re.match(some_regex,os.path.basename(x))]
glob
的问题是它的正则表达式有限。例如,您不能将“[a-z_]+”与 glob
.
所以,最好编写自己的 RegEx,如下所示:
import re
import os
file_num = 3
file_re = r"[a-z_]+{file_num}\.txt".format(file_num=file_num)
match_file = re.compile(file_re, flags=re.IGNORECASE).match
work_dir = "C:/Path_to_dir/"
names = list(filter(match_file, os.listdir(work_dir)))
在 Python 中,我试图在目录中查找特定文件,比方说,'file3.txt'。目录中的其他文件是 'flie1.txt'、'File2.txt'、'file_12.txt' 和 'File13.txt'。该号码是唯一的,因此我需要按用户提供的号码进行搜索。
file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + f'{file_num} + '.txt')
问题是,returns 'file3.txt' 和 'File13.txt'。如果我尝试向后看,我没有得到任何文件:
file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + r'(?<![1-9]*)' + f'{file_num}' + '.txt')
我如何只得到'file3.txt'?
glob
接受 Unix 通配符,而不是正则表达式。那些功能不那么强大,但您仍然可以实现您的要求。这个:
glob.glob("/path/to/file/*[!0-9]3.txt")
过滤掉前面没有数字的3个文件
对于其他情况,您可以使用列表理解和正则表达式:
[x for x in glob.glob("/path/to/file/*") if re.match(some_regex,os.path.basename(x))]
glob
的问题是它的正则表达式有限。例如,您不能将“[a-z_]+”与 glob
.
所以,最好编写自己的 RegEx,如下所示:
import re
import os
file_num = 3
file_re = r"[a-z_]+{file_num}\.txt".format(file_num=file_num)
match_file = re.compile(file_re, flags=re.IGNORECASE).match
work_dir = "C:/Path_to_dir/"
names = list(filter(match_file, os.listdir(work_dir)))