2014-11-28 3 views
1

다음은 scenerio입니다. 디렉토리의 모든 음악 파일을 검색하고 해당 목록에 대한 사용자 입력을 검사하는 Windows 7 프로그램을 만들고 있습니다. 사용자가 선택한 노래를 재생할 수 있습니다. 트랙의 이름은 '01 name.mp3 '과 같이 번호가 매겨지기 때문에 새로운 목록에서'01 '부분을 제거하고 프로그램에'01 '을 기록하여 해당 부분에서 인식 할 수 있습니다. 새 목록을 만들고 파일을 시작하십시오. 즉, 프로그램이 숫자없이 파일 이름의 새 목록을 만들고 프로그램이 파일을 인식하게하고 숫자를 알게하여 파일을 시작하게합니다. 이것이 가능한가? 는 또한, 여기에 내 코드의 일부이다. (이 이해가되지 않는 경우에 저에게) :목록의 문자열에서 숫자를 제거하고 다시 검색하는 방법

def GetMediaFName(source, name): 
      for key, val in source.iteritems(): 
       if val == name: 
        return key 

newList = {}  
media_list = [] 
for dirpath, dirnames, filenames in os.walk(music_dir) and os.walk(alt_music_dir1): 
    for filename in [f for f in filenames if f.endswith(".m4a") or f.endswith(".mp3") or f.endswith(".mp4")]: 

     media_list.append(os.path.join(dirpath, filename)) 



     media_from_menu = menu[5:] 
     print(media_from_menu) 
     media_to_search1 = media_from_menu + ".mp3" 
     media_to_search2 = media_from_menu + ".wav" 
     media_to_search3 = media_from_menu + ".m4a" 
     media_to_search4 = media_from_menu + ".mp4" 

     for i in media_list: 
      spl = i.split('\\')[-1] 
      if spl is not None: 
       try: 
        tmp = re.findall(r'\d+',spl.split('.')[0][0]) 
        newList.update({i:i.replace(tmp,"").strip()}) 
       except Exception: 
        newList.update({i:spl}) 

     itms = newList.keys() 

      for i in files: 
       tmp = re.findall(r'\d+',i.split('.')[0][0]) 
       newList.update({i:i.replace(tmp,"").strip()}) 
      print(newList) 

     print(GetMediaFName(newList, media_from_menu + ".mp3")) 
+0

Sory, 난 당신이 "01"의 부분에 대해 매우 분명 있다고 생각 해달라고 :

이 하위 디렉토리에있는 파일을 포함하여 특정 경로에 MP3 파일을 찾으려면 . 파일 이름에서 "01"을 제거 하시겠습니까? 아니면 파일 이름의 검색/읽기에서 해당 번호를 무시 하시겠습니까? – lealhugui

+0

죄송합니다, 편집하겠습니다! –

+0

예제 "01 name.mp3"을 참조하여 사용자에게 "name.mp3"또는 "name"이라는 이름을 표시하지 않겠습니까? 또한 모든 음악 파일의 확장자는 동일한가요? – gboffi

답변

1

내가 내가 제대로 이해하고 있는지 확실하지 않습니다,하지만 당신은 원본 파일 이름을 추적 할 다른 이름 (인덱스 번호없이 트랙 이름을 말하게 함)을 사용자에게 보여줍니다.

나는 이것이 당신에게 그것에 대해 약간의 생각을 줄 것이라고 생각합니다. 몇 가지 GUI 라이브러리를 사용할 예정입니까?

import re 

def getFileName(source,name): 
    for key,val in source.iteritems(): 
     if val == name: 
      return key 

names = ['01 name_a.mp3','02 name_b.mp3','03 name_c.mp3','04 name_d.mp3'] 

newList = {} 

for i in names: 
    tmp = re.findall(r'\d+',i.split('.')[0])[0] 
    newList.update({i:i.replace(tmp,"").strip()}) 

print newList 

# If names are not the same, but you run in trouble if all of tracks are 01 name.mp3 , 02 name.mp3 and so on 

print getFileName(newList,'name_a.mp3') 

# Another possible way ! get the index of element user has clicked on and pass it to a list of original file names 
user_selected = 2 
itms = newList.keys() 
print itms[user_selected] 

편집 :

import os 
import os.path 
import re 

def getFileName(source,name): 
    for key,val in source.iteritems(): 
     if val == name: 
      return key 


names = [] 
# From : http://stackoverflow.com/a/954522/3815839 
for dirpath, dirnames, filenames in os.walk("C:\Users\test\Desktop\mp3s"): 
    for filename in [f for f in filenames if f.endswith(".mp3")]: 
     names.append(os.path.join(dirpath, filename)) 

newList = {} 
for i in names: 
    spl = i.split('\\')[-1] 
    if spl is not None: 
     try: 
      tmp = re.findall(r'\d+',spl.split('.')[0])[0] 
      newList.update({i:i.replace(tmp,"").strip()}) 
     except Exception: 
      newList.update({i:spl}) 
itms = newList.keys() 
print newList 

print getFileName(newList,'name_a.mp3') 
+0

답장을 보내 주셔서 감사합니다! TypeError : 암시 적으로 'list'객체를 str으로 변환 할 수 없습니다. –

+0

코드를 표시해 주시겠습니까 (자국어로 표시 할 수 있습니까? 너는 도망 가고 있니? – purrogrammer

+0

다소 큰 프로그램입니다! 어떤 부분을보고 싶습니까? –