1

我有一个名为“não.mp3”的文件,当我尝试用pathlib打开它时,名称被转换为“nao.mp3”,因为文件夹中没有这样的文件,python返回错误:

>>> p = Path("D:/não.mp3")
>>> p
WindowsPath('D:/nao.mp3')
>>> p.exists()
False
>>> with p.open() as f: f.readline()
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\everton\AppData\Local\Programs\Python\Python35\lib\pathlib.py", line 1136, in open
    opener=self._opener)
  File "C:\Users\everton\AppData\Local\Programs\Python\Python35\lib\pathlib.py", line 992, in _opener
    return self._accessor.open(self, flags, mode)
  File "C:\Users\everton\AppData\Local\Programs\Python\Python35\lib\pathlib.py", line 371, in wrapped
    return strfunc(str(pathobj), *args)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\nao.mp3'
4

1 回答 1

0

不幸的是,看起来您将不得不将 Unicode 代码点作为字符串的一部分传递。ã 的代码点是 '00E3' 试试这个:

p = Path("D:/n\u00e3o.mp3")

在 Windows 10 上执行此操作(并具有相应的文件)时,我得到

>>> p.exists()
True

它看起来不像 pathlib 以您期望的方式处理 unicode 字符。您可以尝试其他库,例如osshutil

os.listdir如果您将目录名称作为字节提供,则可以为您提供目录中的所有文件名b''

>>> os.listdir(b'D:/')
[b'n\xe3o.mp3']

使用它,您可以获得可用于构建路径的所有文件的列表。您可以使用以下方法将字节对象转换回字符串bytes_object.decode('latin-1')

于 2016-08-31T18:02:32.780 回答