1

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

4

3 回答 3

3

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

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

例如:

>>> s = "Cura\xc3\xa7ao"
>>> print s.decode('utf-8')
Curaçao
于 2013-08-14T09:41:14.097 回答
1

getsize需要一个 Unicode 对象。您的字符串不是 Unicode 对象。这是一个编码为 UTF-8 的普通字符串。它们是两种截然不同的东西

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

utfstring.decode("utf-8")
于 2013-08-14T09:42:13.327 回答
0

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

于 2018-12-04T00:13:48.080 回答