python - 将用户输入匹配到列表项

标签 python

我写了一些逐行读取文件的内容(每行都有一个文件夹路径,例如:C:\test\test)

它获取路径,然后搜索该路径中的所有文件,将它们放入列表中,然后询问用户要搜索哪部电影。这就是我被困的地方

我想让程序接受用户输入,无论是小写还是大写,并找到匹配的文件并将它们显示在编号列表中给用户

例如:用户搜索 - 星球大战

我想显示找到的文件,例如:

1 Star Wars III.mp4
2 Star Wars Return of the Jedi.mp4

所以基本上打印文件名。 实现这一目标的最佳方法是什么?

到目前为止我已经有了这个,但我停留在这部分:

import os

def find_all():
    list_num = []
    print('\n','='*8,'Current folders saved','='*8)
    with open('movielist.txt', 'r') as file:
        data = file.read().splitlines()
        file.close()
        for i, item in enumerate(data, start=1):
            print('\n',i,item)
            list_num.append(i)

    user_choice = int(input('\nWhat location do you want to search? '))
    if user_choice == 1:
        one = data[0]
        filelist = os.listdir(one)
        movie_name = input('\nWhat movie are you looking for?: ')
        for i, item in enumerate(filelist, start=1):
            print('\n',i,item)

到目前为止,这只是打印该位置中的所有文件。

这是我得到的当前输出:

 ======== Current folders saved ========

 1 K:\Movies

 2 D:\Movies_list\Favorites

 What location do you want to search? 2

 What movie are you looking for?: star wars

 1 Hot Fuzz 2007 1080p.mkv

 2 Inglorious basterds 2008 1080p.mkv

 3 Jurassic Park 3 2001 1080p.mkv

 4 Over the Moon 2020 1080p.mkv

 5 Rogue One - A Star Wars Story 2016 1080p.mkv

 6 Shaun of the Dead 2004 1080p.mkv

 7 Star Wars III 1080p.mkv

 8 The Croods A New Age 2020 1080p.mkv

 9 Thor Ragnarok 2017 1080p.mkv

以星球大战为例。我希望程序只显示 Star Wars III 1080p.mkv 和 Rogue One - A Star Wars Story 2016 1080p.mkv

最佳答案

您可以在两者上使用lower()upper()

 if movie_name.lower() == item.lower(): 
     print('\n',i,item)

或者更好地使用in而不是==

 if movie_name.lower() in item.lower(): 
     print('\n',i,item)

然后用户可以输入Star,它会找到所有带有Star Wars的电影以及所有带有StarTrek的电影

它只需要新变量来枚举选定的电影,因为 if 将跳过标题,然后 i 将显示错误的数字。

    movie_name = input('\nWhat movie are you looking for?: ')

    number = 0

    for i, item in enumerate(filelist, start=1):
        if movie_name.lower() in item.lower(): 
            number += 1
            print('\n',number,item)

对于更复杂的搜索,您可以使用regex,或者您可以将名称放入SQLite等数据库中并使用SQL查询。

使用regex,您可以使用star.*jedi来仅获取星球大战绝地归来

关于python - 将用户输入匹配到列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65419274/

相关文章:

python - PyQt5 对不从 QObject 继承的类中的信号的支持

python - 索引错误 : list index out of range - python

python - 来自 sklearn 的 BayesianGaussianMixture 的非常大的对数概率

python - Bokeh 线图 : How to assign colors when plotting a large number of lines

python - 如何读取带有未转义反斜杠的 JSON 文件?

python - 优化大型阵列沿一个轴的平均值的异常计算

python - Python 的 eval() 有什么作用?

python - Tm1 到 python 到 R

python - 为什么我的数据库抛出错误?

python - 在 Python,Python Image Library 1.1.6 中,如何在不调整大小的情况下扩展 Canvas ?