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 文字を処理しているようには見えません。osまたは などの別のライブラリを試すことができますshutil

os.listdirディレクトリ名をバイトとして指定すると、ディレクトリ内のすべてのファイル名を指定できますb''

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

これを使用すると、パスの構築に使用できるすべてのファイルのリストを取得できます。を使用して、bytes オブジェクトを文字列に戻すことができます。bytes_object.decode('latin-1')

于 2016-08-31T18:02:32.780 に答える