2014-06-20 2 views
2

이것은 Python 3.4에 있습니다.파이썬 (Python) : 공백으로 보이지만 공백이 아닌 문자. 이게 뭐야?

나는 내 자신의 첫 프로그램을 쓰고 있는데, 나는 특정 부분에 갇혀있다. 파이썬에서 메타 데이터에 따라 모든 오디오 파일의 이름을 바꾸려고합니다. 그러나 파일의 이름을 바꾸려고 시도 할 때 가끔 이름을 변경하지 않습니다. 나는 그것이 잘못된 문자로 인한 것 같아요. 문제는 그것이 어떤 성격인지 모르겠다는 것입니다. 나에게 그것은 마치 우주처럼 보이지만 그렇지 않다. 이것은이 출력 목록입니다

from tinytag import TinyTag 
import os 

print("Type in the file directory of the songs you would like to rename and organize:") 
directory = input() 
os.chdir(directory) 
file_list = os.listdir(directory) 

for item in file_list: 
    tag = TinyTag.get(item) 
    title = str(tag.title) 
    artist = str(tag.artist) 
    if artist[-1] == "\t" or artist[-1] == " ": 
     print("Found it!") 
    new_title = artist + "-" + title + ".mp3" 
    #os.rename(item, new_title) 
    print(new_title) 

:

내 코드는 여기에 http://imgur.com/tfgBdMZ

이 그것은 출력 "아티스트 - Title.mp3"로되어있다가 있지만, 경우에 따라서는 "아티스트 -title를 출력 .mp3 ". 공간이있을 때, 파이썬은 그 시점에서 공간의 이름을 바꾸지 않습니다. 첫 번째 항목은 Arethra Franklin입니다. Arethra Franklin -Feelgood가 아닌 Arethra Franklin이라는 파일의 이름을 지정합니다 ..mp3

왜 이렇게할까요? 내 주요 질문은 그 공간이 무엇인가? 공간 ("")인지 확인하기 위해 == 부울 값을 설정하려고했지만 그렇지 않습니다.

"공간"에 도달하면 이름 바꾸기가 끝나고 끝납니다. 그것은 정상적인 공간을 때리는 그러나 그러나 않습니다.

+1

png이므로 복사/붙여 넣기를 통해 확인할 수 없습니다. 원래 제목을있는 그대로 게시하십시오. 그것은 탈출 일 수 있습니다. Arethra Franklin은 128 이상의 Unicode char이 아니므로 ASCII 바이트로 읽으려고하면 그 시점에서 char/sequence를 볼 수 있습니다. – cox

+1

아티스트 문자열을 얻은 후에는 – mackworth

+0

또는'print (repr (artist)) '정확히 무엇인지보기 위해'print (ord (artist [-1]))'을 시도하십시오 –

답변

0

파일 이름에 유니 코드가있을 수 있습니다. 찾고있는 파일 모두가 renamer 인 경우 str.encode을 사용하고 오류를 ? 문자로 바꾸어 처리 할 수 ​​있습니다.

# -*- coding: utf-8 -*- 
funky_name = u"best_song_ever_пустынных.mp3" 
print (funky_name) 
print (funky_name.encode('ascii','replace')) 

이 제공 : 예를 들어 코멘트에서 언급 한 바와 같이

best_song_ever_пустынных.mp3 
best_song_ever_?????????.mp3 

, 당신은 "문제가되는 공간"정말 무엇인지 알아 ord를 사용할 수 있습니다.

+0

그래서 os.rename (name.encode, new_title)이 작동합니까? os.rename이 새 name.encode를 인식하지 못해 이름을 바꿀 파일을 찾지 않습니까? 파일의 이름이 name.encode가 아닌 것입니다. –

+0

명확히하기 위해 실제로 name.encode를 의미하지는 않습니다. 나는 name.encode ('encoding', 'replacement')를 의미합니다. –