我有一个列表,不过是文件名列表。
from traits.api import (HasTraits, Trait)
class bar(HasTraits):
zap = Trait("None", {"None": None})
def __init__(self):
# In reality, determined programmatically at runtime.
add_dict_entries = {"One": 1}
new_dict = {"None": None}
new_dict.update(add_dict_entries)
# self.zap = Trait("None", new_dict)
# self.zap.update(new_dict)
# self.trait_setq(zap=Trait("None", new_dict))
self.remove_trait("zap")
self.add_trait("zap", Trait("None", new_dict))
theBar = bar()
目标:
我想知道列表中是否包含名称为'TrialBalance'的文件。
我的方法:
我正在尝试使用['20190918_TrialBalance_TPBL.txt','20190918_ManagerBalance_TPCL.txt','20190918_ManagerBalance_TPCH.txt']
遍历该列表。
regex
以上代码未产生任何结果,即我得到了一个空白列表。
但是,当我将import re
files=[]
for f in list_files:
tbl = re.findall(r'trial.*\.txt$',f, re.IGNORECASE)
files.append(tbl)
应用于单个项目,即re.findall
时,我会得到正确的答案。
有人可以帮助我指出缺失的地方吗?
答案 0 :(得分:1)
这更简单:
files=[]
for f in list_files:
if 'TrialBalance' in f:
files.append(f)
答案 1 :(得分:0)
对于您的情况,使用re.findall
是低效的,请使用以下方法以及准备好的正则表达式模式和re.search
功能:
import re
list_files = ['20190918_TrialBalance_TPBL.txt', '20190918_ManagerBalance_TPCL.txt', '20190918_ManagerBalance_TPCH.txt']
pat = re.compile(r'trial.*\.txt$', re.I)
trial_files = [f for f in list_files if pat.search(f)]
print(trial_files) # ['20190918_TrialBalance_TPBL.txt']
非正则表达式方法也可行:
list_files = ['20190918_TrialBalance_TPBL.txt', '20190918_ManagerBalance_TPCL.txt', '20190918_ManagerBalance_TPCH.txt']
trial_files = []
for f in list_files:
f_ = f.lower()
if 'trial' in f_ and f_.endswith('.txt'):
trial_files.append(f)
print(trial_files)