2014-12-26 3 views
1

Работа с python 2.7 И ДА, это мой первый вопрос на самом запугивающем форуме, который я когда-либо видел. Во-первых, я не программист, но я стараюсь учиться.Как найти конкретные файлы по пользовательскому вводу

Я хочу, чтобы иметь возможность искать по очень большому количеству mp3-файлов и рассказывать мне, что я набираю, и отображать его на экране. это оно! Подробнее: Я очень новичок в программировании и нуждаюсь в подробностях. Я готов изучить это самостоятельно, нужно знать, где искать ответ. Я искал здесь, в Google и других местах, но точно не знаю о моем проекте.

Это мой код: извините за то, что он все встал, я новичок и должен понять.

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 (prompt) = Tina Turner. Я хочу, чтобы программа просматривала все файлы с именем Tina Turner и отображала их. babysteps, пожалуйста, должен ли я использовать прогулку или find_all или ... Я уже схожу с ума, пытаясь понять это самостоятельно. Поиск документации по чему-то, что я не понимаю, или не знаю, что я ищу, очень запутан. Я - нуб, так что указывая на меня в правильном направлении, мы очень ценим. Надеюсь, что я не «P» никого не рассказывал об этой истории жизни. Если я не прочитаю ничего за пару дней, я буду знать, почему.

ответ

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 
+0

сценарий будет помещен в корень. Мне нужно будет искать sub-dir как некоторый момент. Могу ли я увидеть, например: что? –

+0

@DaveReid Вы нашли ответ на свою проблему? –

+0

Я пробовал оба метода, но не имел успеха ни с одним из них. Я все еще оглядываюсь (книги, интернет, друг .... да у меня есть 1) для получения дополнительной информации. Я не могу найти его для поиска того, что я набираю при подсказке. я могу воспитывать все файлы, но не только тот, который я хочу. –

1

Я попробуем как можно меньше отклониться от вашего исходного кода, хотя для вашего прецедента, возможно, используя glob, как объяснено в @BhargavRao's answer, лучше подходит для ваших нужд.

Насколько я понимаю, я вижу пару рюшечки, которые должны быть приняты во внимание:

  1. Вы перезапись переменную filename в filename = raw_input с for filename in filenames:
  2. Делая каталог на walk be ('.'), вы идете в текущем каталоге, где находится скрипт.Если вы хотите пройти весь «жесткий диск», вы можете просто сделать walk('/')

Теперь это сказал, вы могли бы просто использовать оператор in, чтобы проверить, является ли строка, которую пользователь ввел в имени файла:

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 dname, _, fnames in os.walk('.'): 
    # print path to all filenames. 
    for fname in fnames: 
     if filename in fname: 
      print "FOUND: %s" % os.path.abspath(os.path.join(dname, fname)) 

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

где можно найти документ о том, почему он дает мне 1 букву на выходе имени файла? например: user_input = readme result line 1/home/blah/blah/r result line 2/home/blah/blah/e –

+0

Похоже, вы повторяете строку '' readme'' ... Попробуйте это в своем terminal: 'для буквы в« readme »: print letter« Вероятно, вы сохранили вход пользователя в переменную 'filename', и вы делаете что-то вроде' for foo in filename'. В этот момент 'filename' является строкой, а' for' дает вам письмо по букве (это моя догадка, без дополнительной информации) – BorrajaX

Смежные вопросы