在Python中,我试图在目录中找到一个特定的文件,让我们说,' file3.txt'。目录中的其他文件包括' flie1.txt',' File2.txt',' file_12.txt'和' File13.txt&#39 ;。该号码是唯一的,因此我需要按用户提供的号码进行搜索。
file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + f'{file_num} + '.txt')
问题是,这会同时返回' file3.txt'和' File13.txt'。如果我尝试lookbehind,我没有文件:
file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + r'(?<![1-9]*)' + f'{file_num}' + '.txt')
我如何仅获取&#39; file3.txt&#39;?
答案 0 :(得分:2)
var sentenceDetector = new EnglishMaximumEntropySentenceDetector("OpenNLP/EnglishSD.nbin");
接受Unix通配符,而不是正则表达式。那些功能不那么强大,但你所要求的仍然可以实现。这样:
glob
过滤包含3个没有数字的文件。
对于其他情况,您可以使用列表推导和正则表达式:
glob.glob("/path/to/file/*[!0-9]3.txt")
答案 1 :(得分:1)
glob
的问题在于它的RegEx有限。例如,您不能将“{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)))