5

Python版本:2.7.3

文件名:测试雪人字符--☃--.mp3

进行了以下测试,没有一个被证明是成功的。

>>> os.path.exist('test snowman character --☃--.mp3')
False
>>> os.path.exist(repr('test snowman character --☃--.mp3'))
False
>>> os.path.isfile('test snowman character --\\xe2\\x98\\x83--.mp3')
False
>>> os.path.isfile(r'test snowman character --\\xe2\\x98\\x83--.mp3')
False
>>> os.path.isfile('test snowman character --☃--.mp3'.decode('utf-8'))
False

尝试使用 glob 检索文件,即使该测试失败。

目的是检测此文件并将其复制到另一个文件夹,请指教。

4

3 回答 3

3

使用 unicode 值;最好使用 unicode 转义序列:

os.path.isfile(u'test snowman character --\u2603--.mp3')

当你给它一个 unicode 路径时,Windows 上的 Python 将使用正确的 Windows API 来列出 UTF16 文件。

有关 Python 如何通过 unicode 与 bytestring 文件路径改变行为的更多信息,请参阅Python Unicode HOWTO

于 2013-10-29T01:42:21.843 回答
1

Windows NTFS 文件系统使用 UTF-16(问Martijn Pieters),所以试试这个:

>>> os.path.exists(u'test snowman character --☃--.mp3'.encode("UTF-16"))

但首先要确保解释器的输入编码是正确的。print repr(u'test snowman character --☃--.mp3')应该输出:

u'test snowman character --\u2603--.mp3'

注意:我无法对此进行测试,因为 Windows CMD 不允许我输入雪人符号。无论如何,如果你只给它一个 Unicode 字符串,Python 会做正确的事情,所以编码调用是多余的。总而言之,我推荐Martijn Pieters的回答。

于 2013-10-29T01:41:04.557 回答
0

文字 Unicode 字符串应该以 开头u',试试os.path.exist(u'test snowman character --☃--.mp3')

如果你想使用转义序列,它是ur',如os.path.isfile(ur'test snowman character --\\xe2\\x98\\x83--.mp3')

http://docs.python.org/2.7/reference/lexical_analysis.html#strings

于 2013-10-29T01:29:23.410 回答