python3.5 打开名称上带有 latin1 字符的文件
python3.5 open file with latin1 character on name
我有一个名为 "não.mp3" 的文件,当我尝试使用 pathlib 打开它时,名称被转换为 "nao.mp3",因为文件夹中没有这样的文件,python returns一个错误:
>>> 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'
不幸的是,您似乎必须将 Unicode 代码点作为字符串的一部分传递。 ã 的代码点是 '00E3' 试试这个:
p = Path("D:/n\u00e3o.mp3")
在 Windows 10 上执行此操作(并有相应的文件)时,我得到
>>> p.exists()
True
它看起来不像 pathlib 以您期望的方式处理 unicode 字符。您可以尝试另一个库,例如 os
或 shutil
.
os.listdir
可以为您提供目录中的所有文件名,如果您将目录名称作为字节 b''
:
>>> os.listdir(b'D:/')
[b'n\xe3o.mp3']
使用它,您可以获得可用于构建路径的所有文件的列表。您可以使用 bytes_object.decode('latin-1')
将字节对象转换回字符串
我有一个名为 "não.mp3" 的文件,当我尝试使用 pathlib 打开它时,名称被转换为 "nao.mp3",因为文件夹中没有这样的文件,python returns一个错误:
>>> 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'
不幸的是,您似乎必须将 Unicode 代码点作为字符串的一部分传递。 ã 的代码点是 '00E3' 试试这个:
p = Path("D:/n\u00e3o.mp3")
在 Windows 10 上执行此操作(并有相应的文件)时,我得到
>>> p.exists()
True
它看起来不像 pathlib 以您期望的方式处理 unicode 字符。您可以尝试另一个库,例如 os
或 shutil
.
os.listdir
可以为您提供目录中的所有文件名,如果您将目录名称作为字节 b''
:
>>> os.listdir(b'D:/')
[b'n\xe3o.mp3']
使用它,您可以获得可用于构建路径的所有文件的列表。您可以使用 bytes_object.decode('latin-1')