Найти - Пользователи
Полная версия: Путь и кодировка.
Начало » Python для новичков » Путь и кодировка.
1
152RUSlGef
Добрый день. Столкнулся с проблемой, в пути указаны русскоязычные папки, причем изменить их нельзя. 2 дня уже ищу инфу по этой проблеме, мб вы подскажете?

От этого:
# -*- coding: cp1251 -*-

и этого:

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

Толку 0.
JOHN_16
да, подскажем, что проблему нужно описывать достаточно полно…а вы нам лишь намекнули. Либо рассказывайте подробно, либо ждите телепатов, они ксати есть…были случаи…
152RUSlGef
В общем и целом:

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

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']

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

Винды нет в наличии проверить, а вот так не сработает?
files = glob.glob(os.path.join(dir, u'*'))
152RUSlGef
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)
>>> 
s0rg
152RUSlGef
Проблема в кодировке во второй строчке. Мне бы хотелось узнать, как это можно решить?
Узнать, наконец, что такое юникод.
nnmware
погодите.
Вы говорите надо проверить файлы которые лежат в данной папке.
Зачем тогда вообще все это.
Вот так что, не работает?

dir = os.path.abspath(os.curdir)
for files in os.listdir(dir):
    print files
doza_and
:)
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.
Прошу модератора не сильно ругаться за флеймовый стиль. Просто накипело, столько приходится на это времени убивать…
152RUSlGef
Спасибо ребят, на самом деле делаю чисто для себя, практикуюсь в разных вопросах, что себе придумал то и делаю. И тут сама задумка, скрипт для раскидывания кучи мусора с раб стола, вот и наткнулся на эту проблему, и “Рабочий стол” не переименуешь особо((( Гребанная Винда… Терпеть её не могу… А Нет бук чет убунту не тянет.
JOHN_16
152RUSlGef
не тянет наверное не убунту конкретно, а графический стол. Попробуйте XFСE или лучше LXDE. У меня рабочий ноут в 08 купленный и то был середнячком, стоит openSUSE 12 года и работает шустро, потому что LXDE,а не KDE.

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