Python:getsize无法从itunes xml中找到文件位置

时间:2013-08-14 09:38:18

标签: python python-2.7 unicode

1)将itunes播放列表导出到xml文件

2)使用plistlib

读取xml文件

3)提取歌曲的位置,例如file://localhost/D:/music/Paul%20Desmond/Bossa%20Antigua/05%20-%20Cura%C3%A7ao%20Doloroso.m4a

4)使用urllib.unquote更正%20 for ' '等,并删除文件:// localhost /

5)尝试在生成的文件名上使用os.path.getsize并获得错误

6)纯ascii文件名没有问题

import os
import urllib

fn = 'D:/music/Paul%20Desmond/Bossa%20Antigua/05%20-%20Cura%C3%A7ao%20Doloroso.m4a'
path = urllib.unquote(fn)
os.path.getsize(path)

Traceback (most recent call last):
  File "uni.py", line 9, in <module>
    print os.path.getsize(path)
  File "C:\program files\python27\lib\genericpath.py", line 49, in getsize
    return os.stat(filename).st_size
WindowsError: [Error 2] The system cannot find the file specified: 'D:/music/Pau
l Desmond/Bossa Antigua/05 - Cura\xc3\xa7ao Doloroso.m4a'

getsize与D:\music\Paul Desmond\Bossa Antigua\05 - Curaçao Doloroso.m4a.

一起正常工作

如何将文件名更改为可与getsize一起使用的文件名?如果我可以将\xc3\xa7更改为ç,它会工作,所以我想我错过了一些简单的unicode问题。

http://docs.python.org/2/howto/unicode.html#unicode-filenames包含“os模块中的函数,例如os.stat()也将接受Unicode文件名。”

我在win7下使用python 2.7.2。 xml文件是utf8

3 个答案:

答案 0 :(得分:3)

要将UTF-8编码的路径名转换为Unicode路径名,请执行以下操作:

path = path.decode('utf-8')

例如:

>>> s = "Cura\xc3\xa7ao"
>>> print s.decode('utf-8')
Curaçao

答案 1 :(得分:1)

getsize需要一个Unicode对象。您的字符串不是Unicode对象。这是一个编码为UTF-8的普通字符串。它们是two vastly different things

要将UTF-8编码的字符串转换为UTF字符串,请使用

utfstring.decode("utf-8")

答案 2 :(得分:0)

嗯,我认为原始文件已经是XML文件了。