在字典中搜索带有通配符的字符串

时间:2018-02-07 15:09:48

标签: python flask

我在学习的过程中遇到了一些障碍。我正在尝试在字典中搜索输入的字符串。

示例:我想通过此搜索“S * 1 *显示标题”来播放节目的一个季节的所有剧集。我希望它显示S.01 E.01 Show Title S.01 E.02 Show Title ... S.01 E.10 Show Title。

我可以通过输入“显示标题”来显示所有标题,但这也会带来第2季,第3季和其他内容。

@app.route('/title', methods=['GET', 'POST'])
def showIPTitle():
    savelist = []
    savelen = str(len(savelist))
    savedlist = [ipheader]
    if request.method=='POST':
        catTitle=request.form['title'].lower()
        savedOp=request.form['titlesaveOp']
        saveloc = saveLocat+'title'+catTitle+'.'+timeString+'.csv'

        if len(catTitle) > 3:
            for k, v in Content.items():
                if re.search(catTitle,str(v['assetName'].lower())):
                    asstitle = str(v['assetName'])
                    assstart = (v['LicenseWindowStart'])[8:18]
                    assend = (v['LicenseWindowEnd'])[8:18]
                    providerid = (v['ProviderID'])
                    asssetid = (v['AssetID'].upper())
                    categories = (v['categories'])
                    savelist.append([asssetid,providerid,asstitle,categories,assstart,assend])
                    savedlist.append([asssetid,providerid,asstitle,categories,assstart,assend])
                    savelen = str(len(savelist))
                    if savelen > 1:
                        if savedOp== 'yesSave':
                            savedfile = open(saveloc, 'w')
                            swriter = csv.writer(savedfile, delimiter = '|')
                            swriter.writerows(savedlist)
                            savedfile.close()
                        else:
                            savedOp =="no"
                else:
                    onstorefront = 'No'
                    asstitle = 'NOT FOUND'
                    assstart = 'NOT FOUND'
                    assend = 'NOT FOUND'
                    providerid = 'NOT FOUND'
                    categories = 'NOT FOUND'
            return render_template('Title.html',selected='search',
            savedloc=saveloc,
            saveOp=savedOp,
            savelist=savelist,
            savelen=savelen,
            enteredID=catTitle,
            header=header,
            asstitle=asstitle,
            assstart=assstart,
            assend=assend,
            providerid=providerid,
            categories=categories,
            method=request.method)
        else:
            return render_template('ipvodTitle.html',selected='search',savelen=savelen, savelist=savelist,header =header)
    else:
        print(6)
        return render_template('ipvodTitle.html',selected='search',savelen=savelen, savelist=savelist,header =header)   

我认为问题出在代码

if re.search(catTitle,str(v['assetName'].lower())):

我也试过

if catTitle.lower() in v['assetName'].lower():

但我得到的结果相同。 “节目标题”会播放所有剧集和演出,“S * 1 *节目标题”不会​​带来什么

1 个答案:

答案 0 :(得分:0)

好吧,说实话,我并没有真正阅读你的代码,这里有太多东西,但让我们专注于我认为你的实际问题:如何使用Python的通配符搜索

我知道的唯一方法是fnmatch

cassandra.nodetool

输出:

import fnmatch

data = ['foo', 'foobar', 'foo-bar', 'foo-oo-bar', 'foo-foo', 'foo-oo-foo']

for item in data:
    print('{}: {}'.format(
        item,
        fnmatch.fnmatch(item, 'foo*bar')
    ))

请注意,不是说通配符与Regex真的不一样。除了通过任何Regex方法使用通配符外,不要这样做。