Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2009 15:20:08

u4upy
От:
Зарегистрирован: 2009-05-25
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

чем-то Питону не нравятся пути

# -*- coding: cp1251 -*-

f = open("C:\Documents and Settings\admin\Рабочий стол\лог","w",1)
Получаю:
IOError: [Errno 22] invalid mode ('w') or filename: 'C:\\Documents and Settings\x07dmin\\\xeb\xee\xe3'
Пробелы и кириллица тут не при чем:
f = open("C:\LOG ЛОГ\лог","w",1) работает, файлик чудесно создается,
f = open("C:\Documents and Settings\лог","w",1) работает,
а вот f = open("C:\Documents and Settings\admin\log","w",1) - уже не работает:

IOError: [Errno 22] invalid mode ('w') or filename: 'C:\\Documents and Settings\x07dmin\\log'
Права тоже не причем, админские.

Что делаю не так?



Офлайн

#2 Май 25, 2009 15:32:10

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

чем-то Питону не нравятся пути

u4upy
IOError: invalid mode ('w') or filename: 'C:\\Documents and Settings\x07dmin\\log'



Офлайн

#3 Май 25, 2009 15:33:13

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

чем-то Питону не нравятся пути

пиши
r“C:\Documents and Settings\admin\log”
или
“C:/Documents and Settings/admin/log”



Офлайн

#4 Май 25, 2009 15:48:41

u4upy
От:
Зарегистрирован: 2009-05-25
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

чем-то Питону не нравятся пути

Dimka665
пиши
r“C:\Documents and Settings\admin\log”
или
“C:/Documents and Settings/admin/log”
Здорово! )

Да, оба варианта работают. Только теперь аж 3 вопроса:

почему “admin” воспринимался как “x07dmin”?
что эта за волшебная r?
почему нельзя использовать обратный слеш?



Офлайн

#5 Май 25, 2009 16:07:21

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

чем-то Питону не нравятся пути

u4upy
что эта за волшебная r?
http://docs.python.org/reference/lexical_analysis.html#string-literals
String literals may optionally be prefixed with a letter ‘r’ or ‘R’; such strings are called raw strings and use different rules for interpreting backslash escape sequences.
u4upy
почему нельзя использовать обратный слеш?
http://docs.python.org/reference/lexical_analysis.html#string-literals
The backslash (\) character is used to escape characters that otherwise have a special meaning, such as newline, backslash itself, or the quote character.



Офлайн

#6 Май 25, 2009 16:20:23

u4upy
От:
Зарегистрирован: 2009-05-25
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

чем-то Питону не нравятся пути

Daevaorn
u4upy
что эта за волшебная r?
http://docs.python.org/reference/lexical_analysis.html#string-literals
String literals may optionally be prefixed with a letter ‘r’ or ‘R’; such strings are called raw strings and use different rules for interpreting backslash escape sequences.
u4upy
почему нельзя использовать обратный слеш?
http://docs.python.org/reference/lexical_analysis.html#string-literals
The backslash (\) character is used to escape characters that otherwise have a special meaning, such as newline, backslash itself, or the quote character.
Угу, и вместо “\admin” получалось ASCII Bell “dmin”.

Понял, осознал, исправлюсь. ) Всем спасибо!



Офлайн

#7 Май 25, 2009 19:00:07

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

чем-то Питону не нравятся пути

f = open("""C:\Documents and Settings\admin\Рабочий стол\лог""","w",1)
test :)

Офлайн

#8 Май 25, 2009 21:12:13

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

чем-то Питону не нравятся пути

sypper-pit
f = open(“”“C:\Documents and Settings\admin\Рабочий стол\лог”“”,“w”,1)
Это не тоже, что и:
f = open(“C:\Documents and Settings\admin\Рабочий стол\лог”,“w”,1)
Т.е. проблемы не решит.
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.
>>> "\\a"
'\\a'
>>> len("\\a")
2
>>> """\a"""
'\x07'
>>> len("""\a""")
1
>>> assert """\a""" != "\\a"
>>> assert r"\a" == "\\a"
>>>
Самое правильное решение (если под маздаем работаем), это первый вариант Dimka665.
Если же хоть немного думаем наперёд, то используем os.path.join. Я все пути всегда им собираю.

P.S. А вообще, это азы…



Офлайн

#9 Май 26, 2009 21:38:43

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

чем-то Питону не нравятся пути

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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version