给出目录中的文件列表:
import os
os.listdir('system-outputs/newstest2016/ru-en')
[OUT]:
['newstest2016.AFRL-MITLL-contrast.4524.ru-en',
'newstest2016.AFRL-MITLL-Phrase.4383.ru-en',
'newstest2016.AMU-UEDIN.4458.ru-en',
'newstest2016.NRC.4456.ru-en',
'newstest2016.online-A.0.ru-en',
'newstest2016.online-B.0.ru-en',
'newstest2016.online-F.0.ru-en',
'newstest2016.online-G.0.ru-en',
'newstest2016.PROMT-Rule-based.4277.ru-en',
'newstest2016.uedin-nmt.4309.ru-en']
然后我有输入:
filename, suffix = 'newstest2016.AFRL-MITLL-contrast', 'ru-en'
使用文件名,如果我想进行正则表达式匹配,以便我可以读取文件newstest2016.AFRL-MITLL-contrast.4524.ru-en
,我可以这样做:
import re
fin = open(next(_fn for _fn in os.list('system-outputs/newstest2016/ru-en') if re.match(filename + '.*.' + suffix, _fn) for _fn in))
但是有没有办法阅读/打开模糊匹配"文件名?必须有比上面原始re.match
方式更好的方法。
可以假设os.listdir
总是应该有一个明确的匹配。
答案 0 :(得分:5)
我相信glob可能是更好的方式。
答案 1 :(得分:0)
您可以按照建议使用glob
,但它可以提供多个匹配项。我选择的模式似乎是:
filenames = [
'newstest2016.AFRL-MITLL-contrast.4524.ru-en',
# ...
'newstest2016.PROMT-Rule-based.4277.ru-en',
'newstest2016.uedin-nmt.4309.ru-en'
]
my_filename, suffix = 'newstest2016.AFRL-MITLL-contrast', 'ru-en'
for filename in filenames:
*fn, suff = filename.split('.')
if ('.'.join(fn[:-1]), suff) == (my_filename, suffix):
break
else:
filename = None
# `filename` is now set to real file name
我使用python3.x获得更好的语法,但这很容易移植到python2.x。