Перейти к содержимому

Как вывести обратный слэш в python

  • автор:

Как напечать обратный слеш?

Выведите строки, содержащие обратный слеш «\»
4)Вам дана последовательность строк. Выведите строки, содержащие обратный слеш "\".

Обратный слеш (\) на андроид, как напечатать?
Кто-нибудь с таким сталкивался? Я не смог найти на своем смартфоне данный символ.

Как добавить простой обратный слеш в строку?
У меня есть 2 строки: string str1="stringOne"; string str2="stringTwo"; Необходимо.

Как формулами заменить в строке обратный слеш на двойной
Получаю @NameLookup-ом путь к базе резервирования: firstfolder\rooms.nsf Потом по ней надо сделать.

Спецсимволы, экранирование символов, raw-строки

Теперь, когда познакомились со строками и их методами, пришло время узнать, какие специальные символы могут содержать строки в Питоне. С одним из них мы уже сталкивались – это символ перевода строки:

Я напомню, например, когда задается многострочная строка:

text = """hello python"""

то в ней автоматически добавляет этот символ перевода между строками:

'hello\npython'

Причем, это один символ, хотя он и выглядит как два символа: обратный слеш и n. Мы в этом легко можем убедиться, если воспользоваться функцией:

len(text)

Получим значения 12 = 5 + 6 + 1 – как раз число символов в двух строках плюс один символ перевода строки.

Мало того, мы можем его явно прописывать в любой строке, формируя многострочный текст, например, так:

t = "panda needs\npython"

и, выводя эту строку с помощью функции:

print(t)

увидим две строки.

Все их запоминать совсем не обязательно, на практике используются, в основном:

Значительно реже другие варианты. И, обратите внимание, перед каждым спецсимволом записан символ обратного слеша. Это, своего рода, маркер начала спецсимвола. И если после слеша идет одно из обозначений таблицы, то оно будет восприниматься как некая управляющая последовательность.

Давайте я все это продемонстрирую на примерах. Добавим в строку символ табуляции:

t = "\tpanda needs\npython"

Теперь функция print() интерпретирует его, как особый горизонтальный отступ:

print(t)

Если же мы уберем букву t:

t = "\panda needs\npython"

то при печати увидим просто обратный слеш. В действительности, здесь сработала последняя строчка таблицы: когда не подходит ни одна последовательность, то просто печатается обратный слеш.

Но здесь нужно быть осторожным. Предположим, что мы слово needs хотим заключить в обратные слеши:

t = "panda \needs\ python"

Однако, при печати:

print(t)

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

t = "panda \\needs\\ python"

Тогда в строке они будут автоматически заменены на один символ слеша и при выводе мы это и видим. Это называется экранированием, когда мы символы с двойным назначением записываем, добавляя перед ними обратный слеш. В данном случае получаем двойной слеш.

Часто такие символы следует прописывать при определении путей к файлам. Как мы знаем, в ОС Windows маршруты имеют вид:

Здесь фигурируют обратные слеши для разделения каталогов. Чтобы правильно описать такой путь, слеши следует экранировать:

path = "D:\\Python\\Projects\\stepik\\tex1.py"
print(path)

видим, что маршрут определен верно. Если бы слеши не были экранированы, то получили бы неверный путь к файлу:

path = "D:\Python\Projects\stepik\tex1.py"

Вот этот момент следует хорошо запомнить.

Кроме обратного слеша экранировать также следует и кавычки. Например, мы хотим сформировать строку:

s = "Марка вина "Ягодка""

Внутри этой строки имеются кавычки. Но эти же самые кавычки определяют начало и конец строки в Python. Поэтому такая запись приведет к синтаксической ошибке. Чтобы все работало корректно, нужно выполнить экранирование кавычек:

s = "Марка вина \"Ягодка\""

Или, в данном случае, можно было бы использовать одинарные кавычки для определения строки, а внутри нее записать двойные:

s = 'Марка вина "Ягодка"'

Но на практике рекомендуется всегда выполнять экранирование таких символов, чтобы избежать случайных ошибок. Например, в этой строке уже нельзя просто так записать одинарные кавычки:

s = 'Марка вина 'Ягодка''

Снова получим синтаксическую ошибку, их нужно экранировать:

s = 'Марка вина \'Ягодка\''

В завершение этого занятия отмечу, что в Python можно задавать, так называемые, сырые (row) строки. Это строки, в которых игнорируются спецпоследовательности и все символы воспринимаются буквально так, как записаны. Например, если взять строку с путем к файлу:

path = "D:\\Python\\Projects\\stepik\\tex1.py"

то сейчас, при отображении, мы видим по одному слешу:

print(path)

Но, если определить эту же строку, как сырую, добавив букву r перед ней:

path = r"D:\\Python\\Projects\\stepik\\tex1.py"

то при печати увидим по два слеша, именно так, как прописали. Поэтому, в таких строках можно убрать спецопределения и записывать строку буквально так, как она должна выглядеть:

path = r"D:\Python\Projects\stepik\tex1.py"

На этом мы завершим наше очередное занятие по Python. Из него вы должны хорошо себе представлять, что такое спецсимволы и экранирование символов. Какие основные спецсимволы для строк существуют и как определяются сырые строки.

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#10. Основные методы строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#20. Оператор цикла while

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#41. Рекурсивные функции

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#44. Замыкания в Python

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#54. Выражения генераторы

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

#66. Аннотация базовыми типами

#67. Аннотации типов коллекций

#68. Аннотации типов на уровне классов

#69. Конструкция match/case. Первое знакомство

#70. Конструкция match/case с кортежами и списками

#71. Конструкция match/case со словарями и множествами

#72. Конструкция match/case. Примеры и особенности использования

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Обратный слеш в сырых строках

Почему во втором случае кавычка экранируется? И как тогда написать raw строку из одной черты, лол?

В общем-то в доках прямо так и написано:

. r»\» is not a valid string literal.

Но мне так и не понятно, почему?

Kalashnikov ★★★
19.12.12 16:47:57 MSK

Ну без этого нельзя было бы в рав-строку включить кавычку.

provaton ★★★★★
( 19.12.12 16:56:28 MSK )

Ещё какой-то тупак (мой?):

>>> re.sub(r"(wtf)", r"\\1", "wtf") '\\1' >>> re.sub(r"(wtf)", r"\\\1", "wtf") '\\wtf' >>> re.sub(r"(wtf)", "\\1", "wtf") 'wtf' >>> re.sub(r"(wtf)", "\\\1", "wtf") '\\\x01' 

Мне вообще, «\wtf» надо, эээа.
Kalashnikov ★★★
( 19.12.12 16:59:50 MSK ) автор топика
Ответ на: комментарий от Kalashnikov 19.12.12 16:59:50 MSK

Тут точно твой, строки выводятся с экранированием бекслешей. Делай print.

In [11]: print(re.sub(r"(wtf)", r"\\\1", "wtf")) \wtf In [12]: len(re.sub(r"(wtf)", r"\\\1", "wtf")) Out[12]: 4 

provaton ★★★★★
( 19.12.12 17:04:22 MSK )
Ответ на: комментарий от provaton 19.12.12 17:04:22 MSK

А, тьфу, но почему тогда работает с тремя слешами а не с двумя? Один для \1, второй идёт прямиком в строку, зачем третий?

>>> re.sub("\\", r"\textbackslash ", text) Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/re.py", line 151, in sub return _compile(pattern, flags).sub(repl, string, count) File "/usr/lib/python2.7/re.py", line 242, in _compile raise error, v # invalid expression sre_constants.error: bogus escape (end of line) 

А падает просто от того что регэксп заканчивается на слеш.
Kalashnikov ★★★
( 19.12.12 17:26:25 MSK ) автор топика
Ответ на: комментарий от Kalashnikov 19.12.12 17:26:25 MSK

А, тьфу, но почему тогда работает с тремя слешами а не с двумя?

Просто дело в том, что регекспы — это сам по себе язык программирования. Поэтому, у тебя идет два этапа экранирования — питоновское экранирование, и экранирование самого движка регекспов. То есть, питон в литерале r’\\\1′ делает три бекслеша, а уже движок регекспов из первых двух бекслешей делает один, а из \1 делает подстановку группы. Просто надо всегда разделять эти два этапа, тогда все станет понятно.

А падает просто от того что регэксп заканчивается на слеш.

Да, регексп не может заканчиваться на слеш, и эту ошибку как раз выдает движок регулярок. Для питона «\\» — это обычный литерал.

Строки¶

Самый распространённый способ создания строк — с помощью двойных кавычек:

s = "Hello" print(s) 

Однако есть несколько других способов, которые имееются в языке:

s = 'Hello' s = """Hello""" s = '''Hello''' 

Все 3 способа записи приводят к одному результату — созданию строки hello

Разные способы записи нужны для удобного создания строк с специальными символами:

q = "What's your name" t = 'He said: "Bond, James Bond"' 

Если бы в языке не было разных способов создания данных строк, то пришлось бы использовать экранирование:

t = "He said: \", James Bond\"" 

Некоторые специальные символы, которые могут находиться внутри строки:

Тройные кавычки используются для создания больших строк:

s = """ Здесь может быть написан текст, занимающий любое количество строк """ 

Операции со строками¶

Получение длины строки:

>>> len("Hello") 5 

Конкатенация (объединение) строк:

>>> "Hello " + "World" 'Hello World' 

Повторение строки n раз:

>>> "python " * 3 'python python python ' 

Обращение к символу i строки s . Индексация начинается с нуля. Индексы могут быть отрицательными, тогда отсчет ведется с конца строки:

>>> s = 'abcdef' >>> s[0] 'a' >>> s[5] 'f' >>> s[-1] 'f' >>> s[-2] 'e' 

s[begin:end:step]

Получение среза строки от позиции begin до позиции end с шагом step . Любой параметр может быть пропущен:

>>> s = "abcdef" >>> s[1:] 'bcdef' >>> s[:-1] 'abcde' >>> s[1:-1] 'bcde' >>> s[1::2] 'bdf' >>> s[::2] 'ace' >>> s[::-2] 'fdb' 

Задачи¶

  1. Получите от пользователя 2 строки, объедините их и выведите экран
  2. Получите от пользователя слово, выведите первую и последнюю букву
  3. Получение от пользователя строку и выведите количество цифр в данный строке
  4. Получите от пользователя строку, в которой будет несколько слов, выведите их количество. Считать что слова отделены друг от друга одним пробелом
  5. Дана строка, содержащая путь к файлу:
C:\Python3\python.exe 

С помощью срезов вывести отдельно имя файла, его расширение, имя каталога и полный путь к каталогу. Пример вывода:

Имя файла: python.exe Расширение: exe Имя каталога: Python3 Полный путь к каталогу: C:\Python3\

Домашнее задание¶

На вход программе подается строка. Необходимо вывести:

  1. Сначала выведите третий символ этой строки.
  2. Во второй строке выведите предпоследний символ этой строки.
  3. третьей строке выведите первые пять символов этой строки.
  4. В четвертой строке выведите всю строку, кроме последних двух символов.
  5. В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).
  6. В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.
  7. В седьмой строке выведите все символы в обратном порядке.
  8. В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.
  9. В девятой строке выведите длину данной строки.
Input: Abrakadabra Output: r r Abrak Abrakadab Arkdba baaar arbadakarbA abdkrA 11 

© Copyright Revision d00c0df4 .

Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest

Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *