2015-11-10 9 views
0

Это мой первый раз, когда я пишу здесь, поэтому надеюсь, что все делаю хорошо. Я использую python 3.5 на Win10, и я пытаюсь «синхронизировать» музыку с Itunes на своем Android-устройстве. В принципе, я читаю XML-файл Itunes Library и получаю все расположение файлов (чтобы я мог копировать/вставлять их в свой телефон), но у меня проблемы с песнями, содержащими иностранные символы.Проблема размещения файлов из-за иностранных символов

import getpass 
import re 
import os 
from urllib.parse import unquote 

user = getpass.getuser() 
ITUNES_LIB_PATH = "C:\\Users\\%s\\Music\\Itunes\\iTunes Music Library.xml" % user 
ITUNES_SONGS_FILE = "ya.txt" 


def write(file, what, newline=True): 
    with open(file, 'a', encoding="utf8") as f: 
     if not os.path.isfile(what): 
      print("Issue locating file %s\n" % what) 
     if newline: 
      what+"\n" 
     f.write(what) 


def get_songs(file=ITUNES_LIB_PATH): 
    with open(file, 'r', encoding="utf8") as f: 
     f = f.read() 
     songs_location = re.findall("<key>Location</key><string>file://localhost/(.*?)</string>", f) 
     for song in songs_location: 
      song = unquote(song.replace("/", '\\')) 
      write(ITUNES_SONGS_FILE, song) 


get_songs() 

Выход:

Issue locating file C:\Users\Dymy\Desktop\Media\Norin &#38;amp; Rad - Bird Is The Word.mp3 

Как мне справиться с этим "& усилителя;" в имени файла?

+0

Возможно, вы могли бы использовать 'replace()' еще раз, чтобы сделать все '&' 'на' & ' – Will

+2

или использовать html lib как ответ [здесь] (http://stackoverflow.com/questions/2360598/ how-do-i-unescape-html-entities-in-a-string-in-python-3-1) –

+1

спасибо @RNar, он решил проблему! Мне было интересно, может ли быть способ избежать кодирования utf8, избегая чтения() и write() ... –

ответ

0

В коде есть пара связанных вопросов, например, ссылки на символы без символа xml, кодированные кодировки символов с использованием regular expressions to parse xml. Чтобы исправить их, используйте парсер xml, такой как xml.etree.ElementTree или используйте более конкретно pyitunes library (I haven't tried it).