我写了一些逐行读取文件的内容(每行都有一个文件夹路径,例如: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/