Dr.Livsi
Фев. 18, 2010 00:01:54
Уважаемые питонеры, помогите, пожалуйста, решить следующую проблему: есть переменная mypath в которую с помощью raw_input передается строка пути типа ‘/home/user/Документы/программирование’, содержащая русские буквы. Проблема в том, что содержимое данной переменной имеет вид “'/home/user/\xd0\x94\xd0\xbe\xd0\xba\xd1\x83\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x82\xd1\x8b/\xd0\xbf\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5'”. Вопрос: как сделать так, что бы содержимое переменной имело нормальный вид, т.е. такой, какой был введен ('/home/user/Документы/программирование')?
Dr.Livsi
Фев. 18, 2010 00:14:08
в заголовке скрипта написал:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Файл сохранет в utf-8 кодировке.
В чем же дело?
bazooka
Фев. 18, 2010 22:33:47
>>> a = ‘\xd0\xb5’
>>> print a
е
>>> a
'\xd0\xb5'
>>> print repr(a)
'\xd0\xb5'
>>> print str(a)
е
>>> str(a) == repr(a)
False
vaxXxa
Фев. 19, 2010 02:30:15
bazooka, так можно на Питоне и объяснить, почему Земля вертится)))
Dr.Livsi
Фев. 22, 2010 00:29:41
bazooka вот что у меня получилось:
>>> mypath = repr(raw_input('введите путь: ‘))
введите путь: ’/home/user/Документы/программирование'
>>> mypath
'“\\t\'/home/user/\\xd0\\x94\\xd0\\xbe\\xd0\\xba\\xd1\\x83\\xd0\\xbc\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x8b/\\xd0\\xbf\\xd1\\x80\\xd0\\xbe\\xd0\\xb3\\xd1\\x80\\xd0\\xb0\\xd0\\xbc\\xd0\\xbc\\xd0\\xb8\\xd1\\x80\\xd0\\xbe\\xd0\\xb2\\xd0\\xb0\\xd0\\xbd\\xd0\\xb8\\xd0\\xb5\'”'
Ferroman
Фев. 22, 2010 00:48:34
А переменная и так имеет нормальный вид. repr - это внутреннее представление строки, и не должно вас беспокоить.
Dr.Livsi
Фев. 22, 2010 01:02:46
когда я пытаюсь сделать так:
>>> mypath = str(raw_input('введите путь: ‘))
введите путь: ’/mnt/win_d/Программирование/Python'
>>> f=os.listdir(mypath)
он мне выдает вместо списка файлов в директории следующую ошибку:
Traceback (most recent call last):
File “<pyshell#3>”, line 1, in <module>
f=os.listdir(mypath)
OSError: No such file or directory: “'/mnt/win_d/\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5/Python'”
Dr.Livsi
Фев. 22, 2010 01:19:24
как сделать, что бы он все таки воспринимал mypath как ‘/mnt/win_d/Программирование/Python’, а не как “'/mnt/win_d/\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5/Python'”?
.Serj.
Фев. 22, 2010 07:33:37
Не надо было преобразовывать введённый путь в строку:
In [1]: import os
In [2]: mypath = raw_input('введите путь:')
введите путь:/home/serj/Документы/
In [3]: f = os.listdir(mypath)
In [4]: print f
------> print(f)
['LaTeX', 'MetaPost', 'ConTeXt',
'\xd1\x82\xd0\xb5\xd1\x85\xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb4\xd0\xb5\xd1\x80\xd0\xb6\xd0\xba\xd0\xb0',
'svn-book.pdf', 'i808x', '.directory', 'HIG', 'post', 'ProgLang', 'Inventory', 'PCB & schematic', 'scrapbook',
'\xd0\xa2\xd0\xa3\xd0\xa1\xd0\xa3\xd0\xa0', 'Bacula', 'manual_reference.pdf', 'DSCN3618.JPG',
'\xd0\xa0\xd0\xb0\xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5', 'Lin', 'Web',
'Word 2007 \xd0\xb4\xd0\xbb\xd1\x8f \xd0\xbc\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbc\xd0\xb0\xd1\x82\xd0\xb8\xd0\xba\xd0\xb0.pdf',
'paper-street-performer.pdf', '3D graphics', 'DSCN3617.JPG', 'typography.janson-syntax.107514.pdf', 'fract.ps']
Dr.Livsi
Фев. 22, 2010 11:54:22
все, получилось :))) Всем большое спасибо!