Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2013 13:20:10

152RUSlGef
Зарегистрирован: 2013-01-05
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь и кодировка.

Добрый день. Столкнулся с проблемой, в пути указаны русскоязычные папки, причем изменить их нельзя. 2 дня уже ищу инфу по этой проблеме, мб вы подскажете?

От этого:

# -*- coding: cp1251 -*-

и этого:

# -*- coding: utf-8 -*-

Толку 0.

Офлайн

#2 Март 2, 2013 14:43:31

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Путь и кодировка.

да, подскажем, что проблему нужно описывать достаточно полно…а вы нам лишь намекнули. Либо рассказывайте подробно, либо ждите телепатов, они ксати есть…были случаи…



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 2, 2013 15:06:15

152RUSlGef
Зарегистрирован: 2013-01-05
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь и кодировка.

В общем и целом:

Я вызываю текущую папку(где лежит скрипт), и хочу проверить какие файлы есть в этой папке.

dir = os.path.abspath(os.curdir) # -- C:\Documents and Settings\Admin\Рабочий стол
files = glob.glob(dir) # --  ['C:\\Documents and Settings\\Admin\\\xd0\xe0\xe1\xee\xf7\xe8\xe9 \xf1\xf2\xee\xeb']

Проблема в кодировке во второй строчке. Мне бы хотелось узнать, как это можно решить?

Офлайн

#4 Март 2, 2013 15:25:13

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

Путь и кодировка.

Про телепатов поддерживаю, тоже видел.

Винды нет в наличии проверить, а вот так не сработает?
files = glob.glob(os.path.join(dir, u'*'))

Офлайн

#5 Март 2, 2013 15:42:11

152RUSlGef
Зарегистрирован: 2013-01-05
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь и кодировка.

nnmware
Про телепатов поддерживаю, тоже видел.

Винды нет в наличии проверить, а вот так не сработает?
files = glob.glob(os.path.join(dir, u'*'))


Traceback (most recent call last):
  File "C:/Documents and Settings/Admin/Рабочий стол/copyFiles.py", line 8, in <module>
    files = glob.glob(os.path.join(dir, u'*'))
  File "C:\Python27\lib\ntpath.py", line 108, in join
    path += "\\" + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 32: ordinal not in range(128)
>>> 

Офлайн

#6 Март 2, 2013 15:50:12

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Путь и кодировка.

152RUSlGef
Проблема в кодировке во второй строчке. Мне бы хотелось узнать, как это можно решить?
Узнать, наконец, что такое юникод.

Офлайн

#7 Март 2, 2013 16:19:09

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

Путь и кодировка.

погодите.
Вы говорите надо проверить файлы которые лежат в данной папке.
Зачем тогда вообще все это.
Вот так что, не работает?

dir = os.path.abspath(os.curdir)
for files in os.listdir(dir):
    print files

Офлайн

#8 Март 2, 2013 20:19:46

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Путь и кодировка.

:)

152RUSlGef
русскоязычные папки, причем изменить их нельзя. 2 дня уже ищу инфу
А у меня переименовать директорию быстрее получается. И после этого забывается не только ваша проблема, но и такое множество других, что многие даже и не подозревают сколько их (проблемы бывают не только с питоном).

По возможности не делайте пробелов и других заковыристых символов в именах папок и файлов.

Еще помогает работа с короткими именами файлов
>>> import win32api
>>> win32api.GetShortPathName(u"C:\\Program Files")
'C:\\PROGRA~1'
или узнать что сам windows думает по этому поводу
dir /X /-C 
02.03.2013  16:12                 1              a.py
02.03.2013  22:35                38              aaa.py
23.09.2011  20:47            215040 BOOST_~1.DLL boost_python-vc100-mt-1_47.dll
18.07.2012  20:40            243712              dudley.dll
18.07.2012  20:38            653312              escript.dll
18.07.2012  20:42            842240              finley.dll
23.09.2011  11:24            120320              netcdf.dll
23.09.2011  11:25             76288 NETCDF~1.DLL netcdf_cpp.dll
18.07.2012  20:39            292864              pasowrap.dll
18.07.2012  20:42            148992              weipa.dll
02.03.2013  22:42                 1 1C1CC~1.TXT  археолог геолог.txt

И потом парсинг вывода команды dir

:) последняя история была с sublime text2. У одного перца стоял codegear и setup прописал свою временную папку в registry Мои Дкументы\… причем не в system encoding. После этого часть плагинов sublime тихо перестала работать. Валились на извлечении совершенно других переменных из окружения. Поди догадайся как одно с другим связано. Хорошо что питон использовался, видно было где проблема.

Еще описание нескольких проблем:
http://forum.ru-board.com/topic.cgi?forum=62&topic=1072

p.s.
Прошу модератора не сильно ругаться за флеймовый стиль. Просто накипело, столько приходится на это времени убивать…



Отредактировано doza_and (Март 2, 2013 20:56:16)

Офлайн

#9 Март 3, 2013 01:52:50

152RUSlGef
Зарегистрирован: 2013-01-05
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь и кодировка.

Спасибо ребят, на самом деле делаю чисто для себя, практикуюсь в разных вопросах, что себе придумал то и делаю. И тут сама задумка, скрипт для раскидывания кучи мусора с раб стола, вот и наткнулся на эту проблему, и “Рабочий стол” не переименуешь особо((( Гребанная Винда… Терпеть её не могу… А Нет бук чет убунту не тянет.

Офлайн

#10 Март 3, 2013 14:35:28

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Путь и кодировка.

152RUSlGef
не тянет наверное не убунту конкретно, а графический стол. Попробуйте XFСE или лучше LXDE. У меня рабочий ноут в 08 купленный и то был середнячком, стоит openSUSE 12 года и работает шустро, потому что LXDE,а не KDE.

по делу: вам нужно понять что такое в Python2 строки и что такое unicode объекты, и почему unicode объекты выгоднее в данном аспекте. Уже столько раз обсуждалось что видимо истину трудно найти в просторах всемирой помой.. паутине. В общем суть такая: позаботьтесь что любая строка попадающая в вашу python программу была конвертирована в unicode с оответствующей этой строке кодировкой. Внутри python программы все делается использую unicode. Если нужно вывести unicode объект,то конвертируете его в строку с необходимой кодировкой.все.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version