1

1) iTunesプレイリストをxmlファイルにエクスポート

2) plistlib で xml ファイルを読み込む

3) 曲の場所を抽出します。file://localhost/D:/music/Paul%20Desmond/Bossa%20Antigua/05%20-%20Cura%C3%A7ao%20Doloroso.m4a

4) %20 for ' 'urllib.unquote で などを修正し、file://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いくので、単純なユニコードの問題がいくつか欠けていると思います。

http://docs.python.org/2/howto/unicode.html#unicode-filenamesos.stat()には、「 Unicode ファイル名も受け入れるなどの os モジュールの関数」が含まれています。

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

getsizeUnicode オブジェクトが必要です。あなたの文字列は Unicode オブジェクトではありません。これは、UTF-8 としてエンコードされた通常の文字列です。この2つは大きく異なるものです。

UTF-8 でエンコードされた文字列から UTF 文字列に変換するには、次を使用します。

utfstring.decode("utf-8")
于 2013-08-14T09:42:13.327 に答える