Архив метки: Python

Как использовать Django Channel

Django — это популярная среда Python, используемая для разработки веб-приложений с использованием спецификаций сервера WGSI (интерфейс шлюза веб-сервера) и ASGI (интерфейс шлюза асинхронного сервера). WGSI используется для разработки синхронных приложений Python, а AGSI используется для разработки асинхронных и синхронных веб-приложений. Канал — это полезная функция Django, которая используется для обработки WebSocket, протокола чата и т. д. Наряду с протоколом HTTP. Канал построен по спецификации сервера ASGI. Сеанс двусторонней интерактивной связи между браузером пользователя и сервером можно открыть с помощью WebSocket. Клиент инициирует соединение WebSocket, и сервер отвечает согласием или закрыть сообщение. Сообщения WebSocket проталкиваются в канал с помощью производителей и отправляются потребителям, которые прослушивают канал. В этой статье показано, как использовать каналы для обработки сообщений WebSocket.

 

Предпосылки

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

  • Установите Django версии 3+ на Ubuntu 20+ (желательно)
  • Создайте проект Django
  • Запустите сервер Django, чтобы проверить, правильно ли он работает.

 

Настроить приложение Django

Выполните следующую команду, чтобы создать приложение Django с именем socketapp:

$ python3 manage.py startapp socketapp

 

Выполните следующую команду, чтобы установить канал:

$ pip install channels

 

Добавьте каналы и имя приложения в часть INSTALLED_APP файла settings.py :

INSTALLED_APPS = [

…..

'channels',

'socketapp'

]

 

Определите значение ASGI_APPLICATION в файле settings.py :

ASGI_APPLICATION = ‘channel_pro.asgi.application’

 

Создайте папку с именем templates внутри папки socketapp и установите расположение шаблона приложения в части TEMPLATES файла settings.py :

TEMPLATES = [

{

….

'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],

….

},

]

Следующий вывод появится в терминале после запуска сервера Django. Выходные данные показывают, что работает ASGI/Channels версии 3.0.3.

Создайте файл шаблона с именем index.html в определенном месте шаблона для отображения данных, отправленных WebSocket. Объект сокета, созданный с помощью JavaScript, будет считывать данные с помощью метода JSON.parse(), а затем передавать значение в содержимое тега <h1>, который содержит значение идентификатора, msg.

<!DOCTYPE html>

<html lang=»en»>

<head>

<meta charset=»UTF-8″>

<title>Учебники по каналу Django</title>

<script>

socket = new WebSocket(«ws://localhost:8000/msg/»);

socket.onmessage = function(e) {

var data = JSON.parse(e.data);

document.querySelector(‘#msg’).innerText = data.timeValue;

}

</script>

</head>

<body>

<center>

<h1 style=»color:blue» id =»msg»>{{ text }}</h1>

</center>

</body>

</html>

 

Измените views.py файл в socketapp со следующим содержанием. Index.html файл шаблона будет отображаться в браузере с текстом переменной, когда метод index() этого сценария вызывается из urls.py файла. Если сообщение не передается из сокета, в браузере будет отображаться текст «AndreyEx».

views.py

# Импортировать модуль рендеринга из Django

from django.shortcuts import render



# Создать функцию индекса для отображения HTML-файла в браузере

def index(request):

return render(request, "index.html", context={'text': 'AndreyEx'})

 

Измените urls.py файл в socketapp со следующим содержанием. В скрипте определены два пути: путь admin/ используется для открытия панели администрирования Django, а путь msg/ используется для чтения сообщения WebSocket.

urls.py

from django.contrib import admin

from django.urls import path



from socketapp import views



urlpatterns = [

path('admin/', admin.site.urls),

path('msg/', views.index)

]

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

http://localhost:8000/msg/

 

Теперь создайте файл consumer.py внутри папки socketapp с помощью следующего скрипта. Метод connect() для ws_consumer будет использоваться для приема подключения к сокету, чтения текущего значения времени каждую секунду и отправки текущего времени в формате JSON через WebSocket, когда этот метод вызывается из файла маршрутизации.

consumers.py

# Импортировать модуль JSON

import json

# Импортировать WebsocketConsumer

from channels.generic.websocket import WebsocketConsumer

# Импортировать модуль datetime

from datetime import datetime

# Импортировать модуль sleep

from time import sleep





# Определить класс потребителя для отправки данных через

class ws_consumer(WebsocketConsumer):

def connect(self):

self.accept()

while(True):

now = datetime.now()

self.send(json.dumps({'timeValue': now.strftime("%H:%M:%S")}))

sleep(1)

 

Создайте routing.py внутри папки socketapp с помощью следующего скрипта. Путь msg/ определен в сценарии для вызова потребителя для отправки данных в сокет.

routing.py

from django.urls import path

from.consumers import ws_consumer



# Задайте путь для вызова потребителя

ws_urlpatterns = [

path('msg/', ws_consumer.as_asgi())

]

 

Измените файл asgi.py с помощью следующего сценария. Модули, необходимые для обработки запросов HTTP и WebSocket, импортируются в сценарий.

asgi.py

# Импортировать модуль os

import os

# Импортировать get_asgi_application для обработки протокола http

from django.core.asgi import get_asgi_application

# Import ProtocolTypeRouter и URLRouter для установки маршрутизации веб-сокетов

from channels.routing import ProtocolTypeRouter, URLRouter

# Import AuthMiddlewareStack для обработки веб-сокета

from channels.auth import  AuthMiddlewareStack

# Импортировать маршрутизацию веб-сокетов

from socketapp.routing import ws_urlpatterns



# Назначьте значение для DJANGO_SETTINGS_MODULE

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'channel_pro.settings')



# Определить переменные приложения для обработки HTTP и WebSocket

application = ProtocolTypeRouter({

'http': get_asgi_application(),

'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))



})

 

Теперь снова запустите следующий URL-адрес из браузера, чтобы прочитать данные из WebSocket.

http://localhost:8000/msg/

 

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

 

Вывод

В этом руководстве показано, как реализовать приложение реального времени с использованием инфраструктуры и каналов Django, создав простые цифровые часы. Другие типы приложений реального времени также могут быть реализованы с использованием Django и каналов, таких как системы онлайн-чата. Скрипты, используемые в этой статье, работают только с Django версии 3+ и Channel версии 3+. Итак, если вы используете более раннюю версию Django или Channel, вам нужно будет обновить версию перед тестированием скрипта, представленного в этом руководстве.



2021-03-06T10:29:34
Python

Цикл for в Python

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

В Python есть две основные конструкции циклов, которые позволяют многократно повторять блок кода: циклы for и while

В этой статье мы рассмотрим основы for в Python. Мы также покажем вам, как использовать range для генерации последовательности чисел, а else break и continue для изменения потока цикла. Читать

Кортежи в Python

Python имеет несколько последовательных типов данных, которые позволяют хранить коллекции данных организованным и эффективным способом. Основные типы последовательностей — это строки, списки, кортежи и объекты диапазонов.

В этой статье вы познакомитесь с основами кортежей Python. Мы покажем вам, как создать кортеж, получить доступ к элементам, распаковать кортеж и многое другое.

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

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

Создание кортежей

Кортежи создаются путем помещения элементов в круглые скобки [] , разделенных запятыми. В них может быть любое количество предметов, которые могут быть разных типов. Вот пример:

colors = ('orange', 'white', 'green')

Кортеж может содержать элементы со смешанными типами данных. Вы также можете объявлять вложенные кортежи, где еще одним из его элементов являются списки, кортежи или словари:

my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))

Круглые скобки без элементов между ними обозначают пустой кортеж:

my_tuple = ()

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

my_tuple = (1)

type(my_tuple)

my_tuple = (1,)

type(my_tuple)

<class 'int'>

<class 'tuple'>

Кортежи также можно создавать с помощью конструктора tuple() :

colors_list = ['orange', 'white', 'green']

colors_typle = tuple(colors_list)

print(type(colors_typle))

<class 'tuple'>

Другой способ создания кортежа — использовать функцию упаковки кортежа, которая позволяет вам создать кортеж из последовательности объектов, разделенных запятыми:

directions = "North", "South", "East", "West"

print(type(directions))

<class 'tuple'>

Доступ к элементам кортежа

На элемент кортежа можно ссылаться по его индексу. Индексы являются целыми числами и начинаются от 0 до n-1 где n — количество элементов:

my_tuple = ["a", "b", "c", "d"]

             0    1    2    3

В Python индексы указываются в квадратных скобках:

my_tuple[index]

Например, чтобы получить доступ к третьему элементу кортежа, вы должны tuple_name[2] :

directions = ("North", "South", "East", "West")directions[2]

'East'

Если вы ссылаетесь на несуществующий индекс, IndexError исключение IndexError:

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

IndexError: tuple index out of range

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

my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))my_tuple[3][1]

'bar'

Вы также можете получить доступ к элементам кортежа, используя отрицательные индексы. Последний элемент обозначается как -1 , второй последний элемент — как -2 и так далее:

my_tuple = ("a", "b", "c", "d")

            -4   -3   -2   -1

directions = ("North", "South", "East", "West")directions[-2]

'East'

Нарезка кортежей

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

sequence[start:stop:step]

  • start — это индекс, с которого начинается извлечение. Когда используется отрицательный индекс, он указывает смещение от конца кортежа. Если этот аргумент опущен, нарезка начинается с индекса 0.
  • stop — индекс, до которого следует завершить извлечение; результат не включает элемент «стоп». Когда используется отрицательный индекс, он указывает смещение от конца кортежа. Если этот аргумент опущен или превышает длину кортежа, нарезка выполняется до конца кортежа.
  • step — необязательный аргумент, указывающий шаг нарезки. Если не указано, по умолчанию используется 1. Если используется отрицательное значение, срез принимает элементы в обратном порядке.

Результатом нарезки кортежа является новый кортеж, содержащий извлеченные элементы.

Следующие формы допустимы в Python:

T[:] # copy whole tuple

T[start:] # slice the tuple starting from the element with index "start" to the end of the tuple.

T[:stop] # slice the tuple starting from the begging up to but not including the element with index "stop".

T[start:stop] #  slice the tuple starting from the element with index "start" up to but not including the element with index "stop".

stop"

T[::step] # slice the tuple with a stride of "step"

Ниже приведен пример того, как нарезать кортеж, начиная с элемента с индексом 1 до элемента с индексом 4, но не включая его:

vegetables = ('Potatoes', 'Garlic', 'Celery', 'Carrots', 'Broccoli')vegetables[1:4]

('Garlic', 'Celery', 'Carrots')

Распаковка кортежей

Распаковка последовательности в функции Python, которая позволяет вам назначать объекты последовательности переменным. Вот пример:

colors = ('orange', 'white', 'green')

a, b, c = colors

print(a)

print(b)

print(c)

Значения элементов кортежа в соответствии с их положением присваиваются переменным слева:

orange

white

green

При распаковке кортежей количество переменных в левом кортеже должно быть таким же, как количество элементов кортежа. В противном случае вы получите исключение ValueError

colors = ('orange', 'white', 'green')

a, b = colors

ValueError: too many values to unpack (expected 2)

Распаковка удобна, когда метод или функция возвращает последовательность объектов:

def square_area_circumference(side_lenght):

  return side_lenght * side_lenght, side_lenght * 4



area, circumference = square_area_circumference(5)



print(area)

print(circumference)

25

20

Изменение кортежа

Поскольку кортежи являются неизменяемыми структурами данных, мы не можем обновлять их напрямую. Вы не можете добавлять, изменять, удалять элементы в кортежах.

Если вы попытаетесь изменить элемент кортежа, вы получите исключение TypeError

colors = ("orange", "white", "green")

colors[1] = "blue"

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment

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

my_tuple = (1, 2, [5, 6, 7])

my_tuple[2][1] = 4

print(my_tuple)

(1, 2, [5, 4, 7])

Длина кортежа

Встроенная len() возвращает общее количество элементов данного объекта.

Чтобы найти длину кортежа, передайте его в качестве аргумента функции len() :

len(L)

Вот пример:

colors = ("orange", "white", "green")

lenght = len(colors)

print(lenght)

3

Итерация по кортежу

Чтобы перебрать все элементы в кортеже, вы можете использовать цикл for

directions = ("North", "South", "East", "West")

for direction in directions:

  print(direction)

North

South

East

West

Если вам нужны индексы, в вашем распоряжении есть несколько методов. Наиболее распространенные способы — комбинировать функции range() и len() или использовать встроенную функцию enumerate()

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

directions = ("North", "South", "East", "West")

for i in range(len(directions)):

  print("Index {} : Value {}".format(i, directions[i]))

Index 0 : Value North

Index 1 : Value South

Index 2 : Value East

Index 3 : Value West

Вместо использования range(len(...)) вы можете использовать enumerate() для перебора кортежа более питоническим способом:

directions = ("North", "South", "East", "West")

for index, value in enumerate(directions): 

  print("Index {} : Value {}".format(index, value))

Index 0 : Value North

Index 1 : Value South

Index 2 : Value East

Index 3 : Value West

Проверить, существует ли элемент

Чтобы проверить, существует ли элемент в кортеже, вы можете использовать операторы in а not in

colors = ("orange", "white", "green")

print("orange" in colors)

Результатом будет True или False :

True

Вот еще один пример с использованием оператора if :

colors = ("orange", "white", "green")

if "blue" not in colors:

  print("no")

else:

  print("yes")

no

Кортежные методы

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

  • count(x) — возвращает количество раз, когда «x» встречается в кортеже.
  • index(x) — возвращает позицию первого вхождения элемента со значением ‘x’.

Ниже приведен простой пример, показывающий, как использовать эти методы:

my_tuple = ("a", "s", "s", "q", "a", "n")

print(my_tuple.count('a'))

print(my_tuple.index('a'))

2

0

Вывод

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2021-03-04T12:13:15
Python

Как построить данные в Pandas Python

Визуализация данных играет важную роль в анализе данных. Pandas — это мощная библиотека анализа данных на Python для науки о данных. Он предоставляет различные варианты визуализации данных с помощью метода .plot(). Даже если вы новичок, вы можете легко построить график своих данных с помощью библиотеки Pandas. Вам необходимо импортировать пакеты pandas и matplotlib.pyplot для визуализации данных.

В этой статье мы рассмотрим различные методы построения графиков данных с помощью Python Pandas. Мы выполнили все примеры в редакторе исходного кода pycharm с помощью пакета matplotlib.pyplot.

 

Построение в Pandas Python

В Pandas.plot() имеет несколько параметров, которые вы можете использовать в зависимости от ваших потребностей. В основном, используя параметр «kind», вы можете определить, какой тип графика вы будете создавать.

 

Синтаксис для построения данных с использованием Pandas Python

Следующий синтаксис используется для построения DataFrame в Pandas Python:

# Импорт pandas и matplotlib.pyplot

import pandas as pd

import matplotlib.pyplot as plt

# Подготовка данных для создания DataFrame

data_frame = {

'Column1': ['field1', 'field2', 'field3', 'field4',...],

‘Column2': ['field1', 'field2', 'field3', 'field4',...]

}

var_df= pd.DataFrame(data_frame, columns=['Column1', 'Column2])

print(Variable)

# построение гистограммы

var_df.plot.bar(x='Column1', y='Column2')

plt.show()

 

Вы также можете определить тип графика, используя параметр kind следующим образом:

var_df.plot(x='Column1', y='Column2', kind=’bar’)

 

Объекты Pandas DataFrames имеют следующие методы построения графиков:

  • Точечный график : plot.scatter()
  • Построение столбцов : plot.bar(), plot.barh(), где h представляет собой график горизонтальных столбцов.
  • Линейный график : plot.line()
  • Построение пирога: plot.pie()

Если пользователь использует только метод plot() без использования каких-либо параметров, он создает линейный график по умолчанию.

Теперь мы подробно остановимся на некоторых основных типах построения графиков с помощью некоторых примеров.

 

Точечная диаграмма в Pandas

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

 

Пример

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

import matplotlib.pyplot as plt

import pandas as pd

gdp_cal= pd.DataFrame({

'GDP_growth': [6.1, 5.8, 5.7, 5.7, 5.8, 5.6, 5.5, 5.3, 5.2, 5.2],

'Oil_Price': [1500, 1520, 1525, 1523, 1515, 1540, 1545, 1560, 1555, 1565]

})

df = pd.DataFrame(gdp_cal, columns=['Oil_Price', 'GDP_growth'])

print(df)

df.plot(x='Oil_Price', y='GDP_growth', kind = 'scatter', color= 'red')

plt.show()

Как построить данные в Pandas Python

 

Построение линейных диаграмм в Pandas

График линейной диаграммы — это основной тип построения, при котором заданная информация отображается в виде ряда точек данных, которые далее соединяются сегментами прямых линий. Используя линейные диаграммы, вы также можете показать тенденции изменения информации во времени.

 

Пример

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

import pandas as pd

import matplotlib.pyplot as pltinfl_cal = {'Year': [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011],

'Infl_Rate': [5.8, 10, 7, 6.7, 6.8, 6, 5.5, 8.2, 8.5, 9, 10]

}

data_frame = pd.DataFrame(infl_cal, columns=['Year', 'Infl_Rate'])

data_frame.plot(x='Year', y='Infl_Rate', kind='line')

plt.show()



 

В приведенном выше примере вам нужно установить kind = ‘line’ для построения линейного графика.

 

Метод 2 # Использование метода plot.line()

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

import pandas as pd

import matplotlib.pyplot as pltinf_cal = {'Year': [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011],

'Inflation_Rate': [5.8, 10, 7, 6.7, 6.8, 6, 5.5, 8.2, 8.5, 9, 10]

}

data_frame = pd.DataFrame(inf_cal, columns=['Inflation_Rate'], index=[2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011])

data_frame.plot.line()



plt.title('Inflation Rate Summary of Past 11 Years')

plt.ylabel('Inflation_Rate')

plt.xlabel('Year')

plt.show()



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

Как построить данные в Pandas Python

 

Построение гистограмм в Pandas

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

 

Пример

В следующем примере мы взяли уровень грамотности в нескольких странах. DataFrames создаются, в которых «Country_Names» и «literacy_Rate» являются двумя столбцами DataFrame. Используя Pandas, вы можете отобразить информацию в форме гистограммы следующим образом:

import pandas as pd

import matplotlib.pyplot as pltlit_cal = {

'Country_Names': ['Pakistan', 'USA', 'China', 'India', 'UK', 'Austria', 'Egypt', 'Ukraine', 'Saudia', 'Australia',

'Malaysia'],

'litr_Rate': [5.8, 10, 7, 6.7, 6.8, 6, 5.5, 8.2, 8.5, 9, 10]

}

data_frame = pd.DataFrame(lit_cal, columns=['Country_Names', 'litr_Rate'])

print(data_frame)

data_frame.plot.bar(x='Country_Names', y='litr_Rate')

plt.show()



Как построить данные в Pandas Python

 

Вы также можете реализовать приведенный выше пример, используя следующий метод. Установите kind = ‘bar’ для построения гистограммы в этой строке:

data_frame.plot(x='Country_Names', y='litr_Rate', kind='bar')

plt.show()

Построение горизонтальной гистограммы в Pandas

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

import matplotlib.pyplot as plt

import pandas as pddata_chart = {'litr_Rate': [5.8, 10, 7, 6.7, 6.8, 6, 5.5, 8.2, 8.5, 9, 10]}

df = pd.DataFrame(data_chart, columns=['litr_Rate'], index=['Pakistan', 'USA', 'China', 'India', 'UK', 'Austria', 'Egypt', 'Ukraine', 'Saudia', 'Australia',

'Malaysia'])



df.plot.barh()



plt.title('Literacy Rate in Various Countries')

plt.ylabel('Country_Names')

plt.xlabel('litr_Rate')

plt.show()



В df.plot.barh() полоса используется для горизонтального построения. После выполнения вышеуказанного кода в окне отображается следующая гистограмма:

Как построить данные в Pandas Python

 

Построение круговой диаграммы в Pandas

Круговая диаграмма представляет данные в круглой графической форме, в которой данные отображаются в виде фрагментов в зависимости от заданного количества.

 

Пример

В следующем примере мы отобразили информацию о «Earth_material» в разных частях круговой диаграммы. Сначала создайте DataFrame, а затем с помощью панд отобразите все детали на графике.

import pandas as pd

import matplotlib.pyplot as pltmaterial_per = {'Earth_Part': [71,18,7,4]}

dataframe = pd.DataFrame(material_per,columns=['Earth_Part'],index = ['Water','Mineral','Sand','Metals'])



dataframe.plot.pie(y='Earth_Part',figsize=(7, 7),autopct='%1.1f%%', startangle=90)

plt.show()



Приведенный выше исходный код строит круговую диаграмму доступных данных:

Как построить данные в Pandas Python

 

Вывод

В этой статье вы увидели, как построить DataFrames в Python Pandas. В статье выше выполняются разные виды построения. Для построения других типов, таких как box, hexbin, hist, kde, density, area и т. д., Вы можете использовать тот же исходный код, просто изменив тип графика.



2021-03-03T18:53:10
Python

Как разбить строки в Python

В этой статье объясняется, как разделить строки в Python с помощью методов «split()» и «partition()». Эти методы особенно полезны, если вы хотите преобразовать предложение или группу слов в анализируемые и повторяемые типы Python. Все примеры кода в этой статье протестированы на Python версии 3.8.6.

 

Метод разделения

Метод split() может использоваться для разделения слов с использованием разделителя, указанного пользователем. Он возвращает список разделенных слов без разделителя. Если разделитель не указан пользователем, пробел (один или несколько) используется в качестве единственного разделителя.

Например, приведенный ниже код вернет в качестве вывода «[‘Linux’, ‘Ex’]»:

text = "Linux Ex"

text.split()

 

Приведенный ниже код вернет «[‘AndreyEx’, ‘ru’]» в качестве вывода, когда «.» используется как разделитель:

text = "AndreyEx.ru"

text.split(“.”)

 

Разделитель не обязательно должен состоять из одного символа. Метод split принимает два аргумента:

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

Оба эти аргумента необязательны. Как упоминалось выше, если аргумент «sep» не указан, пробел используется в качестве разделителя для разделения. Аргумент «maxsplit» имеет значение по умолчанию «-1» и по умолчанию разбивает все вхождения. Рассмотрим код ниже:

text = "AndreyEx.co.us"

text.split(“.”)

 

В качестве вывода он вернет «[‘AndreyEx’, ‘co’, ‘us’]». Если вы хотите остановить разделение при первом появлении разделителя, укажите «1» в качестве аргумента «maxsplit».

text = "AndreyEx.co.us"

text.split(“.”, 1)

 

Приведенный выше код вернет в качестве вывода «[‘AndreyEx’, ‘co.us’]». Просто укажите количество вхождений, когда вы хотите, чтобы процесс разделения остановился, в качестве второго аргумента.

Обратите внимание, что если есть последовательные разделители, для остальных разделителей после первого разделения будет возвращена пустая строка (когда аргумент «maxsplit» не используется):

text = "AndreyEx.ru"

text.split(".")

 

Приведенный выше код вернет «[‘AndreyEx’,», ‘ru’] »в качестве вывода. Если вы хотите удалить пустые строки из результирующего списка, вы можете использовать следующий оператор понимания списка:

text = "AndreyEx.ru"

result = text.split(".")

result = [item for item in result if item != ""]

print (result)

 

Вы получите «[‘AndreyEx’, ‘ru’]» в качестве вывода после выполнения приведенного выше примера кода.

Обратите внимание, что метод split() перемещается слева направо для разделения строк на слова. Если вы хотите разделить строку справа налево, используйте вместо этого «rsplit()». Его синтаксис, использование и аргументы точно такие же, как у метода split().

Если при использовании методов «split()» или «rsplit()» в строке не обнаружен разделитель, исходная строка возвращается как единственный элемент списка.

 

Метод разделения

Метод partition() может использоваться для разделения строк, и он работает идентично методу split() с некоторыми отличиями. Наиболее заметное отличие состоит в том, что он сохраняет разделитель и включает его как элемент в результирующий кортеж, содержащий разделенные слова. Это особенно полезно, если вы хотите разделить строку на повторяющийся объект (в данном случае кортеж), не удаляя исходные символы. Рассмотрим код ниже:

text = "AndreyEx.ru"

result = text.partition(".")

print (result)

 

Приведенный выше пример кода вернет «(‘AndreyEx’, ‘.’, ‘ru’)» в качестве вывода. Если вы хотите, чтобы результат был типа списка, используйте вместо этого следующий пример кода:

text = "AndreyEx.ru"

result = list(text.partition("."))

print (result)

 

Вы должны получить «[‘AndreyEx’, ‘.’, ‘ru’]» в качестве вывода после выполнения приведенного выше примера кода.

Метод partition() принимает только один аргумент, называемый sep. Пользователи могут указать разделитель любой длины. В отличие от метода split(), этот аргумент является обязательным, поэтому вы не можете пропустить разделитель. Однако вы можете указать пробел в качестве разделителя.

Обратите внимание, что метод разделения останавливается при первом появлении разделителя. Поэтому, если ваша строка содержит несколько разделителей, метод partition() проигнорирует все другие вхождения. Вот пример, иллюстрирующий это:

text = "AndreyEx.co.us"

result = list(text.partition("."))

print (result)

 

Пример кода выдаст в качестве вывода «[‘AndreyEx’, ‘.’, ‘Co.us’]». Если вы хотите разделить все вхождения разделителя и включить разделитель в окончательный список, возможно, вам придется использовать шаблон «Регулярное выражение» или «Регулярное выражение». В примере, упомянутом выше, вы можете использовать шаблон RegEx следующим образом:

import re

text = "AndreyEx.co.us"

result = re.split("(.)", text)

print (result)

 

Вы получите «[‘AndreyEx’, ‘.’, ‘Co’, ‘.’, ‘Us’]» в качестве вывода после выполнения приведенного выше примера кода. Точка была экранирована в операторе RegEx, упомянутом выше. Обратите внимание, что хотя приведенный выше пример работает с одним символом точки, он может не работать со сложными разделителями и сложными строками. Возможно, вам придется определить свой собственный шаблон RegEx в зависимости от вашего варианта использования. Пример приведен здесь, чтобы дать вам некоторое представление о процессе сохранения разделителя в окончательном списке с помощью операторов RegEx.

Метод partition() иногда может оставлять пустые строки, особенно когда разделитель не найден в строке, которую нужно разделить. В таких случаях вы можете использовать операторы понимания списка для удаления пустых строк, как описано в разделе о методе «split()» выше.

text = "AndreyEx"

result = list(text.partition("."))

result = [item for item in result if item != ""]

print (result)

 

После выполнения приведенного выше кода вы должны получить в качестве вывода «[‘AndreyEx’]».

 

Вывод

Для простых и понятных разделений вы можете использовать методы «split()» и «partition()», чтобы получить повторяющиеся типы. Для сложных строк и разделителей вам нужно будет использовать операторы RegEx.



2021-02-25T12:04:32
Python

Замена строки Python с использованием шаблона

Любые строковые данные можно заменить другой строкой в ​​Python с помощью метода replace(). Но если вы хотите заменить любую часть строки на соответствие определенному шаблону, вам необходимо использовать регулярное выражение. Он используется для поиска определенного шаблона в конкретном строковом значении, и строка будет заменена другой строкой, если будет найдено какое-либо совпадение. Python использует модуль ‘re’ для использования шаблона регулярного выражения в скрипте для поиска, сопоставления или замены. Использование шаблонов регулярных выражений для замены строк немного медленнее, чем обычный метод replace(), но многие сложные поиски и замены можно легко выполнить с помощью шаблона. Вы можете заменить строку различными способами, используя шаблон в Python. В этой статье показаны некоторые распространенные варианты использования шаблона для замены строки.

 

Список метасимволов:

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














    Характер Описание
    . Используется для соответствия любому одиночному символу, кроме новой строки.
    ^ Используется для сопоставления любого символа или строки в начале строки.
   $ Используется для сопоставления любого символа или строки в конце строки.
    + Используется для сопоставления одного или нескольких экземпляров шаблона.
    ? Используется для соответствия нулю или одному вхождению шаблона.
  () Используется для группировки паттернов.
  {} Используется для соответствия на основе нижнего или верхнего или нижнего и верхнего

пределы.

   [] Используется для сопоставления символов на основе заданного диапазона.
   | Используется для сопоставления шаблонов на основе логики OR.
   Используется для определения определенных символов или не символов, цифр или нецифровые.

 

Метод Replace:

В Python для замены строки используется метод sub() модуля re.

Синтаксис:

sub(pattern, replace, string, count=0, flags=0)

Здесь шаблон, замена и строка являются обязательными аргументами. Если шаблон совпадает с любой частью строки, он заменит часть значением замены аргумента. Два других аргумента необязательны. Некоторые варианты использования вышеупомянутых метасимволов с методом sub() показаны в следующих примерах замены строк.

 

Пример-1: заменить строку точным соответствием

Если вам известно точное строковое значение, которое вы хотите искать в основной строке, вы можете использовать значение поисковой строки в качестве шаблона в методе sub(). Создайте файл Python со следующим скриптом. Здесь строковое значение поиска — «дождливый», а заменяющее строковое значение — «солнечный».

#!/usr/bin/env python3

# Импортировать модуль регулярных выражений



# Import regex module

import re



# Определить строку

orgStr = "Это дождливый день"



# Заменить строку

repStr = re.sub("дождливый", "солнечный", orgStr)



# Распечатать исходную строку

print("Оригинальный текст:", orgStr)



# Распечатать замененную строку

print("Замененный текст:", repStr)

 

 

Пример-2: поиск и замена строки в начале

Создайте файл python со следующим сценарием, чтобы узнать об использовании ‘^’ в шаблоне регулярного выражения. Здесь ‘ ^ [A-Za-z] +’ используется в качестве шаблона поиска. Он будет искать все буквенные символы от A до Z и от a до z в начале текста и заменять его пустым значением. Замененная строка будет напечатана в верхнем регистре для метода upper().

#!/usr/bin/env python3

# Импортировать модуль регулярных выражений

import re



# Возьмите строку input

originalText = input("Введите текстn")



# Замените строку на основе шаблона

replacedText = re.sub('^[A-Za-z]+' , '', originalText).upper()



# Распечатать замененную строку

print("Замененный текст:", replacedText)

Вывод:

Здесь «Привет, добро пожаловать в andreyex» принимается как ввод, а слово «Привет» заменяется на ‘ ’ для шаблона.

 

Пример-3: поиск и замена строки в конце

Создайте файл python со следующим сценарием, чтобы узнать об использовании символа «$» в шаблоне регулярного выражения. Здесь ‘[ a-z0-9] + $’ используется в качестве шаблона в скрипте. Он будет искать все небольшие алфавитов и цифры в конце текста, и если возвращается true, то соответствующая часть будет заменена на строке «ru».

#!/usr/bin/env python3

# Импортировать модуль регулярных выражений

import re



# Возьмите строку input

originalText = input("Введите URL-адресn")



# Замените строку на основе шаблона

replacedText = re.sub('[a-z0-9]+$' , 'ru', originalText)



# Распечатать замененную строку

print("Замененный текст:", replacedText)

Вывод:

Здесь «https://www.google.com» используется как вводимый текст, а после замены «https://www.google.ru» печатается как вывод.

 

Пример-4: поиск и замена определенной части строки

Создайте файл Python со следующим скриптом для поиска и замены части текста в том месте, где совпадает шаблон. Здесь список адресов электронной почты назначается в виде текста переменной с именем emails. ‘@[az]’ — шаблон для поиска. Он будет искать любую подстроку, начинающуюся с маленьких букв, за которыми следует символ «@». Если какая-либо подстрока совпадает, она заменит эту подстроку на @andreyex.

#!/usr/bin/env python3

# Импортировать модуль регулярных выражений

import re



# Определить строку

emails = 'nadmin@google.runmanager@yahoo.com nandreyex@andreyex.ru'



# Заменить конкретную часть строка на основе шаблона

replacedText = re.sub('@[a-z]*', '@andreyex', emails)



# Вывести исходную строку

print("Первоначальный текст:", emails)



# Печать замененных строк

print("nЗамененный текст:", replacedText)

 

Вывод:

Здесь каждая доменная часть адреса электронной почты, назначенная в тексте, заменена на «andreyex».

 

Вывод:

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



2021-02-16T22:19:59
Python