Найти - Пользователи
Полная версия: Список файлов из папки с кириллицей в названии
Начало » Python для новичков » Список файлов из папки с кириллицей в названии
1
sim
Я пытался читать и гуглить, но найденное было сложновато. Хотелось бы получить пример, уверен, что это раз плюнуть любому специалисту. Спасибо.

У меня простая задача. Пытаюсь получить список файлов из папки, в пути есть кириллица.

Мой код:
import os
basedir = "C:/temp/куку"
os.listdir(basedir)
и ошибка:

Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
WindowsError: The system cannot find the path specified: ‘c:\\temp\\\x
aa\xe3\xaa\xe3/*.*’
pasaranax
import os
basedir = "C:/temp/куку".decode()
os.listdir(basedir)
так работает?

У меня ФС в utf-8 и ошибка не возникает, подозреваю, если перекодировать путь в юникод, то должно сработать. Симулировал ошибку перекодированием basedit в cp1251. Питон 2.6, линупс.
Rodegast
Не знаю как на маздайке, но у меня так работало:
basedir = u"/home/rodegast/РусскийКаталог/"
sim
basedir = “C:/temp/куку”.decode()

выдает ошибку

basedir = u“C:/temp/куку”

работает!

Большое спасибо. Мне казалось я это пробовал, но видимо запутался в папках. Да, это было Win, Python 2.5.2
Андрей Светлов
Питон для windows file names использует кодировку mbsc.
Для самого питона может стоять другая - например, проставляют в начале файла
# -*- coding: <encoding-name> -*-

Чтобы работало всегда, нужно
basedir = u“/home/rodegast/РусскийКаталог/”
basedir = basedir.encode('mbsc')

Последняя строка автоматически подменяется на Py_FileSystemDefaultEncoding если аргумент был в unicode - и ее в принципе можно опустить.
Для некитайских языков Py_FileSystemDefaultEncoding совпадает с установками винды. Т.е если в control panel стоит cp1251 - то mbsc именно она и есть.
Существуют и другие чудеса. MBSC пытается выдать максимально похожий по начертанию символ.
Т.е. если язык по умолчанию русский, а нужно перекодировать немецкое ‘a’ с амляутом (две точки над буквой) - получится просто английское ‘a’.
Надеюсь, в такие дебри залезать не прийдется.

Обратите внимание - изначально basedir была в юникоде, по правилам для конкретного модуля, в котором эта строка встретилась.
Если был просто ascii - нужно переконвертировать сначала в unicode, а потом в mbsc.
Например
basedir = “/home/rodegast/РусскийКаталог/”
basedir = basedir.decode('cp1251')
basedir = basedir.encode('mbsc')


P.S.
В тройке введено хорошее правило - строки только в unicode. Избавляет от путанницы. Но тройка будет в массовом использовании только через год-два, так что пока приходится уделять особое внимание кодировкам - и частота задаваемых вопросов на этом форуме тому подтверждение.
Didis
my_path=(sys.path).decode('cp1251') # !!! спасло ****************
#.encode('mbsc')
# LookupError: unknown encoding: mbsc

p.s. спасло, но как-то локально, в другом месте того же блока кода не проканало. не помогают так же кодировки 866, koi. Кто-нить дайте ссылочку на урок по работе с юникодом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB