Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2009 17:40:35

mdv
От:
Зарегистрирован: 2009-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

Уже неделю как использую на домашнем компьютере 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 по поводу кодировок и юникода.



Офлайн

#2 Июнь 12, 2009 20:38:34

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

использовать 3-ные кавычки пробовал ?

Офлайн

#3 Июнь 12, 2009 20:53:32

mdv
От:
Зарегистрирован: 2009-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

Где 3-ные использовать? зачем?



Офлайн

#4 Июнь 13, 2009 10:16:17

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

символ “ надо либо ”“” “ ”“”
пробуй

print """ " """
или

print " \" "
хотя возможно я ошибаюсь

Отредактировано (Июнь 13, 2009 12:36:10)

Офлайн

#5 Июнь 13, 2009 11:04:09

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

sypper-pit
print “ /” "
Опечатка - нужен обратный слеш вместо прямого.



Офлайн

#6 Июнь 13, 2009 12:35:08

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

so sorry…..

Офлайн

#7 Июнь 13, 2009 19:25:49

mdv
От:
Зарегистрирован: 2009-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

Да ничего я не ввожу. Проблема в os.walk и в позиции системы к символу " в имени файлов



Офлайн

#8 Июнь 14, 2009 01:37:59

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Windows 7, python и символ " в именах файлов

Внесу и я свою лепту…
Начнём с тестов:

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 файлами, содержащими символ ". Проблем не нашлось. Похоже на баг.



Офлайн

#9 Июнь 14, 2009 10:48:19

mdv
От:
Зарегистрирован: 2009-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Windows 7, python и символ " в именах файлов

ZZZ

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



Офлайн

#10 Июнь 15, 2009 00:19:21

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Windows 7, python и символ " в именах файлов

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

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version