如何通过用户输入搜索特定文件

时间:2014-12-26 19:31:07

标签: python directory find glob

使用python 2.7 是的,这是我见过的最令人生畏的论坛的第一个问题。 首先,我不是程序员,但我正在努力学习。

我希望能够搜索一个非常大的mp3目录并告诉我,我输入的内容是否存在并在屏幕上显示。而已! 细节:    我对编程很新,需要很多细节。我愿意自己学习这个,需要知道在哪里寻找答案。我一直在这里,谷歌和其他地方四处寻找,但我的项目没有确切信息。

这是我的代码:对不起,我很新,需要了解。

from sys import argv
from os import walk
import os

prompt = ':)'


print ("Can I help you with anything today?")
filename = raw_input(prompt)


print ("Looking for %r .... This might take a sec.") % filename
#This is where i get stumped, should I use this or something else?
#don't know how to put userinput into search
for dirname, dirnames, filenames in os.walk('.'):
    # print path to all subdirectories first.
    for subdirname in dirnames:
        print os.path.join(dirname, subdirname)

    # print path to all filenames.
    for filename in filenames:
        print os.path.join(dirname, filename)

print (" That's all i got")
print ("Hit ENTER to exit")
raw_input(prompt)

运行此选项将显示所有文件的列表。我需要,对于EG:raw_input(提示)= Tina Turner。我希望程序查找名为“Tina Turner”的所有文件并显示它们。 babysteps拜托,我应该使用walk还是find_all还是......我已经疯了,试图自己解决这个问题。寻找关于我不理解的东西的文档,或者不知道我在寻找什么,是非常令人困惑的。我是一个菜鸟,所以指出我正确的方向非常感谢。 希望我没有“P”任何关于这个生活故事的解释。 如果我在几天内没有阅读任何内容,我会知道原因。

2 个答案:

答案 0 :(得分:3)

如果您只有一个文件目录,那么您可以使用glob模块。为此,您必须import glob

那是

 for i in glob.glob(filename):
       print i

glob模块在​​搜索类似模式时非常有用。

注意 - glob.glob中的参数必须是目录的完整路径。即如果文件在桌面中,则必须通过home/user/Desktop/*Tina Turner*其中*是元字符,以匹配名称为Tina Turner

的任何其他文件

或搜索您可以执行的所有子目录

for dirname, dirnames, filenames in os.walk('.'):
     for i in glob.glob(dirname+'/*'+filename+'*'):
           print i

答案 1 :(得分:1)

我会尝试尽可能少地偏离原始代码,但对于您的用例,可能使用@ {BhargavRao answer中所述的glob更适合您的需求。

据我了解,我看到了一些需要考虑的因素:

  1. 您使用filename
  2. 覆盖filename = raw_input中的for filename in filenames:变量
  3. 通过将目录设为walk('.'),您将走到脚本所在的当前目录。如​​果您想要遍历整个“硬盘”,您可以{ {1}}
  4. 现在,这就是说,您可以使用in运算符来检查用户输入的字符串是否在文件名中:

    walk('/')