Найти - Пользователи
Полная версия: чем-то Питону не нравятся пути
Начало » Python для новичков » чем-то Питону не нравятся пути
1
u4upy
# -*- 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'
Права тоже не причем, админские.

Что делаю не так?
Dimka665
u4upy
IOError: invalid mode ('w') or filename: 'C:\\Documents and Settings\x07dmin\\log'
Dimka665
пиши
r“C:\Documents and Settings\admin\log”
или
“C:/Documents and Settings/admin/log”
u4upy
Dimka665
пиши
r“C:\Documents and Settings\admin\log”
или
“C:/Documents and Settings/admin/log”
Здорово! )

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

почему “admin” воспринимался как “x07dmin”?
что эта за волшебная r?
почему нельзя использовать обратный слеш?
Александр Кошелев
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.
u4upy
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”.

Понял, осознал, исправлюсь. ) Всем спасибо!
sypper-pit
f = open("""C:\Documents and Settings\admin\Рабочий стол\лог""","w",1)
test :)
ZZZ
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. А вообще, это азы…
sypper-pit
просто подумал , что такое может быть и по побывать стоит ….
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