У меня есть приложение, написанное на Python 2.7, которое считывает пользовательский файл с жесткого диска с помощью os.walk.
Для приложения требуется системная локаль UTF-8 (мы проверяем переменные env перед его запуском), потому что мы обрабатываем файлы с символами Unicode (например, аудиофайлы с именем исполнителя в нем), и мы хотим убедиться, что мы можем сохранить эти файлы с помощью правильное имя файла в файловой системе.
Некоторые из наших пользователей имеют локали UTF-8 (поэтому UTF-8 fs), но каким-то образом умудряются хранить файлы ISO-8859-1 на своем диске. Это вызывает проблемы, когда наш код пытается использовать os.walk() для этих каталогов, поскольку Python выдает исключение при попытке декодировать эту последовательность байтов ISO-8859-1 с использованием UTF-8.
Итак, мой вопрос: как мне заставить python игнорировать этот файл и переходить к следующему вместо прерывания всего os.walk(). Должен ли я просто свернуть свою собственную функцию os.walk()?
Редактировать: до сих пор мы говорили нашим пользователям использовать команду convmv linux для исправления своих имен файлов, однако многие пользователи используют различные типы кодировок (8859-1, 8859-2 и т. д.), и использование convmv требует, чтобы пользователь чтобы сделать обоснованное предположение о том, какие файлы имеют какую кодировку, прежде чем запускать convmv для каждого из них в отдельности.
onerror
дляwalk()
? Какое исключение выбрасывается? - person Silas Ray   schedule 27.07.2012UnicodeDecodeError
. - person Sven Marnach   schedule 27.07.2012LANG
. - person Martijn Pieters   schedule 27.07.2012