Найти - Пользователи
Полная версия: Windows 7, python и символ " в именах файлов
Начало » Python для экспертов » Windows 7, python и символ " в именах файлов
1
mdv
Уже неделю как использую на домашнем компьютере Windows 7. И все было хорошо, пока не взялся за написание небольшого скрипта.
Задача скрипта - пробежаться по указанному каталогу и распаковать все найденные zip-архивы. Раньше за 5 секунд писал подобные скрипты, но тут застрял. При выполнении python (кстати, версия 2.6) сказал, что
UnicodeEncodeError: ‘charmap’ codec can't encode character u'\xab' in position 10: character maps to undefined
Ошибка происходила на строчке
print(file.decode('cp1251').encode('cp866'))
>
Зная, что подобный код работает в куче других моих скриптов, я начал докапываться до истины. Оказалось, что в директории был файл, в названии которого присутствовал символ “. Удостоверившись, что проблема именно в этом файле, переименовываю его уже без символа ”. После этого все стало отлично и скрипт выполнялся без ошибок. Меня это несколько удивило. Попробовал вернуть название назад, но w7 стала ругаться и говорить “снимите защиту от записи”. Сами архивы были закачены торрентом. То есть каким-то образом создать файлы с символом " в системе можно, но адекватно работать с ними w7 не хочет.

Если кто-нибудь может объяснить подобное поведение - буду признателен.
А вообще написал это, чтобы другие не тратили время на отладку в python. Я то сначала полез rtfm по поводу кодировок и юникода.
sypper-pit
использовать 3-ные кавычки пробовал ?
mdv
Где 3-ные использовать? зачем?
sypper-pit
символ “ надо либо ”“” “ ”“”
пробуй
print """ " """
или

print " \" "
хотя возможно я ошибаюсь
ZAN
sypper-pit
print “ /” "
Опечатка - нужен обратный слеш вместо прямого.
sypper-pit
so sorry…..
mdv
Да ничего я не ввожу. Проблема в os.walk и в позиции системы к символу " в имени файлов
ZZZ
Внесу и я свою лепту…
Начнём с тестов:
Python 2.6.1 (r261:67515, Dec  6 2008, 16:42:21) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> assert u'"'.encode('cp1251') == '"'
>>> assert u'"'.encode('866') == '"'
>>> assert u'"'.encode('charmap') == '"' # у нас же проблема с charmap!
>>> assert u'"'.encode('cp1251').decode('charmap') == u'"'
>>>
Так как " содержится во всех этих кодировках и проблем быть не должно.
Проверил у себя на Маке и на ХРене (Py2.6.2, файлы создавал через ntfs-3g) работу os.walk c файлами, содержащими символ ". Проблем не нашлось. Похоже на баг.
mdv
ZZZ

Вы попробуйте в w7 rc2 (build 7201) создать файл с ". Как только у вас это не получится - попробуйте прочитать данный файл с помощью os.walk. Баг в этом случае должен проявиться.
ZZZ
mdv
Вы попробуйте в w7 rc2 (build 7201) создать файл с ". Как только у вас это не получится - попробуйте прочитать данный файл с помощью os.walk. Баг в этом случае должен проявиться.
Я тоже просто констатировал факт, что в моих условиях оно работает. Ни больше, ни меньше.

Кстати, на счёт создания файла с ". Попробуйте так:
open('"', ‘wb’).write('qwerty')
Мне интересно, работает ли оно, а седьмого маздая под рукой нет.
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