Убрать пробелы в файле python

Обновлено: 03.07.2024

С троки в языке программирования Python — это объекты, которые состоят из последовательности символов.

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

Вводная информация о строках

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

Что представляют собой строки в Python

С точки зрения Питона, строка — это упорядоченная последовательность символов, которая предназначена для хранения информации в виде простого текста.

Поэтому тип данных string используется в случае, когда что-то нужно представить в текстовой форме.

Литералы строк

Литерал — способ создания объектов, в случае строк Питон предлагает несколько основных вариантов:

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

💡 Разницы между строками с одинарными и двойными кавычками нет — это одно и то же

Какие кавычки использовать — решать вам, соглашение PEP 8 не дает рекомендаций по использованию кавычек. Просто выберите один тип кавычек и придерживайтесь его. Однако если в стоке используются те же кавычки, что и в литерале строки, используйте разные типы кавычек — обратная косая черта в строке ухудшает читаемость кода.

Кодировка строк

В третьей версии языка программирования Python все строки представляют собой последовательность Unicode-символов.

В Python 3 кодировка по умолчанию исходного кода — UTF-8. Во второй версии по умолчанию использовалась ASCII. Если необходимо использовать другую кодировку, можно разместить специальное объявление на первой строке файла, к примеру:

Максимальная длина строки в Python

Максимальная длина строки зависит от платформы. Обычно это:

  • 2**31 - 1 — для 32-битной платформы;
  • 2**63 - 1 — для 64-битной платформы;

Константа maxsize , определенная в модуле sys :

>>> import sys >>> sys.maxsize 2147483647

Перенос строк

Перенос строки осуществляется с помощью символа \n :

>>> text = "one\ntwo\nthree" >>> print(text) one two three

Конкатенация строк

Одна из самых распространенных операций со строками — их объединение (конкатенация). Для этого используется знак + , в результате к концу первой строки будет дописана вторая:

При необходимости объединения строки с числом его предварительно нужно привести тоже к строке, используя функцию str() :

Сравнение строк

При сравнении нескольких строк рассматриваются отдельные символы и их регистр:

  • цифра условно меньше, чем любая буква из алфавита;
  • алфавитная буква в верхнем регистре меньше, чем буква в нижнем регистре;
  • чем раньше буква в алфавите, тем она меньше;

При этом сравниваются по очереди первые символы, затем — 2-е и так далее.

Далеко не всегда желательной является зависимость от регистра, в таком случае можно привести обе строки к одному и тому же регистру. Для этого используются функции lower() — для приведения к нижнему и upper() — к верхнему:

Пустая строка Python

Объявить пустую строку можно следующими способами:

Как удалить строку в Python

Строки, как и некоторые другие типы данных в языке Python, являются неизменяемыми объектами. При задании нового значения строке просто создается новая, с заданным значением. Для удаления строки можно воспользоваться методом replace() , заменив ее на пустую строку:

Или перезаписать переменную пустой строкой:

Обращение по индексу

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

Индекс начинается с 0

В Python предусмотрена возможность получить доступ и по отрицательному индексу. В таком случае отсчет будет вестись от конца строки:

Форматирование строк

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

Оператор %

Строки в Python обладают встроенной операцией, к которой можно получить доступ оператором %, что дает возможность очень просто делать форматирование. Самый простой пример — когда для подстановки нужен только один аргумент, значением будет он сам:

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

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

Такой способ форматирования строк называет "старым" стилем, который в Python 3 был заменен на более удобные способы.

str.format()

В Python 3 появился более новый метод форматирования строк, который вскоре перенесли и в Python 2.7. Такой способ избавляет программиста от специального синтаксиса %-оператора. Делается все путем вызова .format() для строковой переменной. С помощью специального символа — фигурных скобок — указывается место для подстановки значения, каждая пара скобок указывает отдельное место для подстановки, значения могут быть разного типа:

💭 В Python 3 форматирование строк с использованием "нового стиля" является более предпочтительным по сравнению с использованием %-стиля, так как предоставляет более широкие возможности, не усложняя простые варианты использования.

f-строки (Python 3.6+)

В Python версии 3.6 появился новый метод форматирования строк — "f-строки", с его помощью можно использовать встроенные выражения внутри строк:

Такой способ форматирования очень мощный, так как дает возможность встраивать выражения:

Таким образом, форматирование с помощью f-строк напоминает использование метода format(), но более гибкое, быстрое и читабельное.

Стандартная библиотека Template Strings

Еще один способ форматирования строк, который появился еще с выходом Python версии 2.4, но так и не стал популярным — использование библиотеки Template Strings. Есть поддержка передачи значения по имени, используется $-синтаксис как в языке PHP:

Функции для работы со строками

Для работы со строками в Питоне предусмотрены специальные функции. Рассмотрим их:

Преобразование числового или другого типа к строке:

  • str(n) — преобразование числового или другого типа к строке;
  • len(s) — длина строки;
  • chr(s) — получение символа по его коду ASCII;
  • ord(s) — получение кода ASCII по символу.

Методы для работы со строками

Кроме функций, для работы со строками есть немало методов:

  • find(s, start, end) — возвращает индекс первого вхождения подстроки в s или -1 при отсутствии. Поиск идет в границах от start до end ;
  • rfind(s, start, end) — аналогично, но возвращает индекс последнего вхождения;
  • replace(s, new) — меняет последовательность символов s на новую подстроку new ;
  • split(x) — разбивает строку на подстроки при помощи выбранного разделителя x;
  • join(x) — соединяет строки в одну при помощи выбранного разделителя x;
  • strip(s) — убирает пробелы с обеих сторон;
  • lstrip(s), rstrip(s) — убирает пробелы только слева или справа;
  • lower() — перевод всех символов в нижний регистр;
  • upper() — перевод всех символов в верхний регистр;
  • capitalize() — перевод первой буквы в верхний регистр, остальных — в нижний.

Преобразование из строки в другой тип

В Питоне строки можно преобразовывать в другие типы данных:

string to int

Функция int() преобразовывает целое число в десятичной системе, заданное как строка, в тип int:

При необходимости можно указывать систему счисления:

string to list

Самый простой способ преобразования строки в список строк — метод split() :

При необходимости можно указывать разделитель:

string to bytes

Преобразование строкового типа в байтовый выполняется функцией encode() с указанием кодировки:

string to datetime

Строка в дату преобразовывается функцией strptime() из стандартного модуля datetime :

string to float

Для преобразования строки в число с плавающей точкой используется стандартная функция float :

string to dict

Создание словаря из строки возможно, если внутри нее данные в формате json. Для этого можно воспользоваться модулем json :

string to json

Конвертация объектов Python в объект json выполняется функцией dumps() :

Best practices

Как разбить строку на символы

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

Как из строки выделить числа

Для извлечения чисел из строки можно воспользоваться методами строк:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog" >>> [int(s) for s in str.split() if s.isdigit()] [23, 11, 2]

Данный пример извлекает только целые положительные числа. Более универсальный вариант – регулярные выражения:

Как перевернуть строку

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

С помощью среза — самый быстрый способ:

Использование reversed() и str.join() :

Как удалить последний символ в строке

Как и в предыдущем случае – чтобы убрать последний символ наиболее простым и быстрым вариантом будет использование среза:

Как убрать пробелы из строки

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

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

2 Удалить со строки все пробелы:

Работа со строками — неотъемлемая часть создания практически любого приложения, где используется текст, и язык программирования Python предоставляет широкие возможности работы с такими данными.

Другими словами, это функция строки, которая удаляет символы как с левого, так и с правого конца строки, указывая набор символов для функции strip() в качестве аргумента. По умолчанию она удаляет пробелы из начальной и конечной строки, если в функцию strip() в Python не передается аргумент.

Функция strip() в Python

Синтаксис

Параметр:

Возвращаемое значение: возвращает копию исходной строки, удаляя набор символов или пробелов из исходной строки.

Использование функции strip() для удаления символов из заданной строки

Рассмотрим пример выполнения функции strip() путем удаления начальных или конечных символов из заданной строки в Python.

Использование strip() в Python для удаления пробелов из заданной строки

Рассмотрим пример выполнения функции strip() путем удаления начального или конечного пробела из заданной строки в Python.

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

Программа для получения любой строки от пользователя и удаления любых символов с помощью функции strip()

Для чего используется?

Ниже приведены причины использования данной функции в Python:

  1. Помогает удалить символы из начальной и конечной исходной строки на основе символов, переданных в функцию strip().
  2. Если пользователь не передает никаких символов в функцию, по умолчанию она удаляет только пробелы с обоих концов строки.
  3. Если в начале или в конце исходной строки нет пробела, он возвращает исходную строку, не изменяя ее.
  4. Если переданный символ не соответствует исходной строке, функция возвращает исходную строку.

Вывод

Эта функция используется для удаления символов или пробелов из начала и конца исходной строки. Но если пользователь не передает никаких символов в функцию, она удаляет только пробелы в начале и конце основной строки.

Ниже показано, как удалить белые пространства из строки. В основном он может быть разделен на два различных подхода, один из которых - методы Python str , такие как str.split() и str.replace() ; другой - метод регулярных выражений Python.

В качестве строки для обработки будем использовать строку " Demo Example " в следующих примерах.

Удаляем пробелы в начале строки на Python

str.lstrip() метод

Здесь метод str.lstrip() удаляет ведущие символы, указанные в аргументе метода. Если аргумент не указан, он просто удаляет лидирующие пробелы.

Метод Python regex

^ force regex находит соответствие только в начале строки, а \s означает соответствие всех типов белых пространств, таких как пробелы, табуляции, возвраты и т.д. или, иными словами, оно равнозначно коллекции этих специальных символов [ \t\n\r\f\v] . + указывает на то, что оно должно как можно больше соответствовать пробелам.

Чтобы узнать больше о регексе, можно обратиться к этому Учебное пособие по регулярному выражению на языке Python.

Удаление пробельных символов в конце строки на Python

str.rstrip() метод

В отличие от str.lstrip() , которая удаляет символы в начале строки, str.rstrip() удаляет символы в конце.

Метод Python regex

Аналогично, следует использовать выражение, которое совпадает с белыми пробелами в конце строки.

Удаление пробельных символов в начале и в конце строки на Python

str.strip() Метод

str.strip() является комбинацией str.lstrip() и str.rstrip() для устранения пробелов в начале и в конце строки.

Python regex sub() метод

Удалить все белые пробела строки на Python

Метод замены Pythonской строки str.replace()

Нет необходимости проверять положение белого пространства. Поэтому можно использовать метод str.replace() для замены всех белых пробелов на пустую строку.

Метод sub() замена sub() на Python string regex

Выражение регекса могло быть только \s+ для соответствия белым пробелам.

Удалять дубликаты пробела строки только на Python

Метод Python string split str.split()

str.split() возвращает список подстрок в строке, используя белые пробела в качестве разделительной строки.

Метод python regex split re.split()

Результаты re.split() и str.split() различны, где re.split() будет иметь пустую строку в начале или в конце списка, если в этих позициях у строки есть пробелы белого цвета, но str.split() не включает в свой результат ни одной пустой строки.

Сопутствующая статья - Python String

Как мне убрать все пробелы в строке Python? Например, я хочу, чтобы строка, подобная которой, strip my spaces была превращена stripmyspaces , но я не могу сделать это с помощью strip() :

Обратите внимание, что str.strip влияет только на начальные и конечные пробелы.

Воспользуйтесь преимуществами поведения str.split без параметра sep:

Если вы просто хотите удалить пробелы вместо всех пробелов:

Преждевременная оптимизация

Несмотря на то, что эффективность не является главной целью - написание ясного кода - вот некоторые начальные моменты времени:

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

Несмотря на то, что re.sub медленнее в 11,3 раза, помните, что ваши узкие места наверняка в другом месте. Большинство программ не заметят разницы между любым из этих 3 вариантов.

Это, вероятно, медленнее, чем \s+ замена. Я бы придерживался ре. @OTZ: Вы можете быть удивлены, но смотрите заметку «помните». @ Роджер Хмм. интересный. Вы пробовали s.translate метод случайно? Вероятно, это лучше, чем все методы, показанные на этой странице. @Roger Pate: вам не нужен аргумент 'table' для перевода, это может быть None - хотя, что удивительно, это делает его медленнее . Попробуй myString.translate(None, " \t\r\n\v") . Это займет всего 83% до тех пор, пока самая быстрая техника Роджера (разделение и соединение). Не уверен, что он охватывает все пробельные символы, которые разделяет, но, вероятно, будет достаточно для большинства приложений ASCII.

Также обрабатывает любые пробельные символы, о которых вы не думаете (поверьте, их много).

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

С другой стороны,

И вот версия Python3:

это кажется самым питоническим. почему не проголосовали за это? Код Python 3 в ответе работает. Комментарий от @DanMenes устарел

Самое простое - это заменить:

В качестве альтернативы используйте регулярное выражение:

Удалить начальные пробелы в Python

Удалить конечные или конечные пробелы в Python

Удалите пробелы из начала и конца строки в Python

Удалить все пробелы в питоне

Попробуйте регулярное выражение с re.sub . Вы можете найти все пробелы и заменить на пустую строку.

\s в вашем шаблоне будут совпадать пробельные символы - а не просто пробел (табуляции, новые строки и т. д.). Вы можете прочитать больше об этом в руководстве .

@wrongusername: Обновлено со ссылкой на страницу руководства re module. Это не отвечает на вопрос «как убрать все пробелы». Это только удаляет пробелы

Как упоминал Роджер Пейт, следующий код работал для меня:

Я использую Jupyter Notebook для запуска следующего кода:

Применяются стандартные методы фильтрации списка, хотя они не так эффективны, как методы split/join или translate .

Нам нужен набор пробелов:

Понимание списка (да, используйте скобки: см. Тест ниже):

TL / DR

Это решение было протестировано с использованием Python 3.6

Чтобы удалить все пробелы из строки в Python3, вы можете использовать следующую функцию:

Чтобы удалить любые пробельные символы ('\ t \ n \ r \ x0b \ x0c'), вы можете использовать следующую функцию:

объяснение

str.translate Метод Python - это встроенный метод класса str, он берет таблицу и возвращает копию строки, в которой каждый символ отображается через переданную таблицу перевода. Полная документация для str.translate

Для создания таблицы перевода str.maketrans используется. Этот метод является еще одним встроенным методом класса str . Здесь мы используем его только с одним параметром, в данном случае это словарь, где ключи - это заменяемые символы, сопоставленные со значениями со значением замены символов. Возвращает таблицу перевода для использования с str.translate . Полная документация для str.maketrans

string Модуль питона содержит некоторые общие операции строки и константы. string.whitespace константа, которая возвращает строку, содержащую все символы ASCII, которые считаются пробелами. Сюда входят пространство символов, табуляция, перевод строки, возврат, подача формы и вертикальная табуляция. Полная документация для строки

Во второй функции dict.fromkeys используется словарь для создания, где ключами являются символы в строке, возвращаемые string.whitespace каждым со значением None . Полная документация для dict.fromkeys

Если оптимальная производительность не является обязательным требованием и вы просто хотите что-то очень простое, вы можете определить базовую функцию для проверки каждого символа, используя встроенный в класс «isspace» метод строкового класса:

Построение no_white_space строки таким способом не будет иметь идеальной производительности, но решение легко понять.

Если вы не хотите определять функцию, вы можете преобразовать ее во что-то неопределенно похожее с пониманием списка. Заимствование из верхнего ответа join решения:

Читайте также: