2016-08-31 3 views
1

У меня есть файл под названием «não.mp3», когда я пытаюсь открыть его с помощью pathlib, имя преобразуется в «nao.mp3», так как такого файла нет в папке, питон возвращает ошибку:python3.5 открыть файл с латинским символом по имени

>>> 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' 

ответ

0

к сожалению, похоже, что вы будете иметь, чтобы передать Unicode кодовой точку как часть вашей строки. Код-точка для этого «00E3» Попробуйте это:

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

При этом на Windows 10 (и имеющая соответствующий файл), я получаю

>>> p.exists() 
True 

Это не выглядит как pathlib обрабатывает символы Юникода так, как вы ожидаете. Вы можете попробовать другую библиотеку, например os или shutil.

os.listdir может дать вам все имена файлов в каталоге, если вы даете ему имя каталога как байты b'':

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

Используя это, вы можете получить список всех файлов, которые вы можете использовать строить пути. Вы можете преобразовать объект байтов обратно в строку с помощью bytes_object.decode('latin-1')

+0

Итак, есть ли способ, чтобы я взял список a = ["não", "ã"] и автоматически передал кодовые точки в список, поэтому результаты будут равны а = ["n \ u00e3o", "\ u00e3"]? – user3927607

+0

Мог бы попробовать использовать метод 'str.replace ('a', '\ u00e3')' в цикле. – perfect5th

+0

Я думаю, что это не сработает, если бы у меня было слово «и» в списке, это станет «\ u00e3nd» :(Я пытаюсь понять, как справиться с ним вообще, для любого слова. – user3927607

Смежные вопросы