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

Как создавать аудиокниги с помощью Python

Как вы, возможно, уже знаете, Python — замечательный инструмент программирования, потому что он позволяет нам делать практически все! Это также означает, что мы можем создавать собственное программное обеспечение. В этой статье мы научимся синтезировать речь, научим Python читать PDF-файлы, даже переведем их для нас, а затем прочитаем их нам.

Здесь мы собираемся заставить Python прочитать нам PDF-файл и перевести его для нас. Сначала мы попробуем создать аудиокнигу на английском языке. Таким образом, первое, что мы должны сделать по логике, — это извлечь текст из PDF. Для этого мы используем модуль tika. Как обычно, чтобы установить Тику, приходится колдовать.

 

pip install tika

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

 

from tika import parser

Далее нам понадобится метод from_file(), который принимает максимум два аргумента. Первый аргумент — это имя файла pdf, а второй аргумент называется дополнительным, который запрашивает требуемый тип данных. Если оставить дополнительное поле пустым, будет запрашиваться все, от метаданных до контента. Здесь meta возвращает метаданные, text возвращает текст, а param xmlContent возвращает содержимое XML.

raw = parser.from_file('comment.pdf')

 

Когда у нас есть данные, нам нужно извлечь только текст. Мы делаем это, выбирая «контент» из необработанного.

raw_text = raw['content']

 

Проблема с Tika в том, что она может вылетать из-за слишком большого количества страниц. Итак, воспользуемся и другим методом. Если PDF-файл короткий и приятный, обязательно используйте Tika. Однако вы также можете использовать модуль PyPDF2.

pip install PyPDF2

 

Итак, начнем:

import PyPDF2

 

Сначала мы открываем интересующий документ и читаем из него с помощью метода open() и класса PdfFileReader(). Метод open() принимает здесь два аргумента: первый — это имя файла для чтения, а второй — режим чтения. Здесь «rb» означает чтение двоичного файла. Затем класс PdfFileReader берет на себя pdf_document.

pdf_document = open("welcome.pdf", "rb")

pdf_document_read = PyPDF2.PdfFileReader(pdf_document)

 

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

number_of_pages = pdf_document_read.numPages

 

Затем мы начинаем цикл for для обратного отсчета каждой страницы.

for page in range(1, number_of_pages):

 

Затем нам нужно получить одну страницу с помощью метода getPage() и извлечь текст изнутри с помощью метода extractText().

one_page = pdf_document_read.getPage(page)

raw_text = one_page.extractText()

import pyttsx3

 

Сначала мы инициализируем модуль с помощью init().

engine = pyttsx3.init()

 

Мы можем установить голоса, громкость и скорость с помощью engine.getProperty(). SetProperty() принимает два значения: свойство, которое нужно изменить, и его значение. В данном случае мы установили женские голоса (voices [1] .id) с максимальной громкостью (1) и скоростью 128.

voices = engine.getProperty('voices')

engine.setProperty('voice', voices[1].id)



volume = engine.getProperty('volume')

engine.setProperty('volume', 1.0)



rate = engine.getProperty('rate')

engine.setProperty('rate', 128)

 

Затем мы используем engine.say(), чтобы синтезировать речь и прочитать текст вслух.

engine.say(raw_text)



engine.runAndWait()

 

Полный код будет выглядеть примерно так:

import PyPDF2



pdf_document = open("welcome.pdf", "rb")

pdf_document_read = PyPDF2.PdfFileReader(pdf_document)

number_of_pages = pdf_document_read.numPages



for page in range(1, number_of_pages):

    one_page = pdf_document_read.getPage(page)

    raw_text = one_page.extractText()

    import pyttsx3

    engine = pyttsx3.init()

    voices = engine.getProperty('voices')

    engine.setProperty('voice', voices[1].id)

    volume = engine.getProperty('volume')

    engine.setProperty('volume', 1.0)

    rate = engine.getProperty('rate')

    engine.setProperty('rate', 128)

    engine.say(raw_text)



    engine.runAndWait()

 

В предыдущем примере английский текст произносился на английском языке. Теперь мы попробуем перевести текст на другой язык и прочитать переведенный текст вслух. В случаях при переводе текста первая часть кода аналогична предыдущему разделу. Требуется код вплоть до кода PyPDF2 включительно. Однако после запуска цикла for мы немного изменим код. Здесь нам нужно добавить перевод и заставить его говорить с акцентом на языке назначения.

Сначала установите googletrans.

pip install googletrans

 

Теперь приступим к переводу текста.

from googletrans import Translator

 

Затем мы вызываем Translator().

translator = Translator()

 

Мы используем метод translate(). Здесь мы вводим первый аргумент — текст для перевода — и целевой язык — язык, на который текст должен быть преобразован. В данном случае мы решили перевести текст на французский (или на «fr»).

translated = translator.translate(raw_text, dest='fr')

 

После того, как мы перевели текст, нам нужно извлечь текстовую часть.

translated_2 = translated.text

 

Последний переведет и сохранит переведенный текст в переменной translated_2. Теперь нам нужен модуль, который будет переводить и сохранять озвученный текст в mp3. Для этого нам понадобятся gTTS и PlaySound:

pip install gTTS

pip install playsound



import gtts

from playsound import playsound

 

У класса gtts.gTTS() есть несколько аргументов. Однако здесь мы будем использовать только два аргумента. Первый аргумент — это текст, который нужно прочитать, а второй — язык, на котором будет читаться текст. В данном случае мы решили прочитать текст на французском языке (fr). Причина, по которой мы используем здесь gTTS вместо pyttsx3, заключается в больших акцентах, которые ставятся в прочитанном абзаце. Таким образом, когда текст читается на французском языке с помощью gTTS, это будет звучать так, как будто текст читает француз, а не носитель английского языка.

text = gtts.gTTS(translated_2, lang="fr")

 

Далее сохраняем озвученный текст в mp3. В данном случае я назвал его text.mp3:

text.save("text.mp3")

 

Чтобы воспроизвести сохраненный mp3, мы используем playsound():

playsound("text.mp3")

 

Полный код будет выглядеть примерно так:

import PyPDF2



pdf_document = open("welcome.pdf", "rb")

pdf_document_read = PyPDF2.PdfFileReader(pdf_document)

number_of_pages = pdf_document_read.numPages



for page in range(1, number_of_pages):

    one_page = pdf_document_read.getPage(page)

    raw_text = one_page.extractText()



    from googletrans import Translator

   

    translator = Translator()

    translated = translator.translate(raw_text, dest='fr')

    translated_2 = translated.text



    import gtts

    from playsound import playsound



    tts = gtts.gTTS(translated_2, lang="fr")

    tts.save("text.mp3")

    playsound("text.mp3")



2021-07-23T11:23:24
Python

Анализ криптовалюты. Основы Python для финансов. Часть 2

Начало работы с Python для финансов:

Мы извлечем различные цены на криптовалюту из Yahoo Finance. Давайте начнем с импорта библиотек.

import warnings

warnings.filterwarnings('ignore')  # Скрыть предупреждения

import datetime as dt

import pandas as pd

pd.core.common.is_list_like = pd.api.types.is_list_like

import pandas_datareader.data as web

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns



import matplotlib.dates as mdates

import plotly.express as px

start = dt.datetime(2021, 1, 1)

end = dt.datetime(2021,5,29)

Мы устанавливаем начальную и конечную даты данных.

btc = web.DataReader("BTC-USD", 'yahoo', start, end)  # Collects data

btc.reset_index(inplace=True)



 

Биткойн

«BTC-USD» указывает цены на биткойны в долларах США. Итак, мы извлекаем цены на биткойны.

#bitcoin



crypto= btc[['Date','Adj Close']]

crypto= crypto.rename(columns = {'Adj Close':'BTC'})

# 7-дневная скользящая средняя



crypto[ 'BTC_7DAY_MA' ] = crypto.BTC.rolling( 7).mean()

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

 

Ethereum

Далее мы пробуем Ethereum. Ethereum — вторая по величине криптовалюта по рыночной капитализации после биткойна. Ethereum был запущен 30 июля 2015 года с 72 миллионами монет.

#Ethereum



eth = web.DataReader("ETH-USD", 'yahoo', start, end)  # Collects data

eth.reset_index(inplace=True)

crypto["ETH"]= eth["Adj Close"]



# 7-дневная скользящая средняя

crypto[ 'ETH_7DAY_MA' ] = crypto.ETH.rolling( 7).mean()

 

Dogecoin

Далее идет Dogecoin. Мы уже обсуждали Dogecoin. Он был представлен 6 декабря 2013 года.

#doge coin



doge = web.DataReader("DOGE-USD", 'yahoo', start, end)  # Collects data

doge.reset_index(inplace=True)

crypto["DOGE"]= doge["Adj Close"]



# 7-дневная скользящая средняя

crypto[ 'DOGE_7DAY_MA' ] = crypto.DOGE.rolling( 7).mean()

 

BinanceCoin

Далее мы переходим к Binance Coin. Binance был запущен в июле 2017 года и основан на сети Ethereum. Но у Binance есть собственный блокчейн, цепочка Binance.

#BinanceCoin 



bnb = web.DataReader("BNB-USD", 'yahoo', start, end)  # Collects data

bnb.reset_index(inplace=True)

crypto["BNB"]= bnb["Adj Close"]



# 7-дневная скользящая средняя

crypto[ 'BNB_7DAY_MA' ] = crypto.BNB.rolling( 7).mean()

 

Cardano

Далее берем Cardano. Cardano — это общедоступная блокчейн-платформа, и одноранговые транзакции поддерживаются ее криптовалютой ADA. Он был запущен в сентябре 2017 года.

#Cardano



ada = web.DataReader("ADA-USD", 'yahoo', start, end)  # Collects data

ada.reset_index(inplace=True)

crypto["ADA"]= ada["Adj Close"]





# 7-дневная скользящая средняя

crypto[ 'ADA_7DAY_MA' ] = crypto.ADA.rolling( 7).mean()

 

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

 

#XRP



xrp = web.DataReader("XRP-USD", 'yahoo', start, end)  # Collects data

xrp.reset_index(inplace=True)

crypto["XRP"]= xrp["Adj Close"]



# 7-дневная скользящая средняя

crypto[ 'XRP_7DAY_MA' ] = crypto.XRP.rolling( 7).mean()

 

Dash

Dash — это криптовалюта с открытым исходным кодом. Он был разветвлен из протокола Биткойн. Он был запущен в январе 2014 года.

#Dash



dash = web.DataReader("DASH-USD", 'yahoo', start, end)  # Collects data

dash.reset_index(inplace=True)

crypto["DASH"]= dash["Adj Close"]



 # 7-дневное скользящее среднее

crypto[ ‘DASH_7DAY_MA’ ] = crypto.DASH.rolling( 7).mean()

Теперь, имея под рукой данные, форматируем даты.

#получение дат



crypto.set_index("Date", inplace=True)

Теперь давайте посмотрим на данные.

crypto[['BTC','ETH','DOGE','BNB','ADA','XRP','DASH']].head()

Как мы видим, все данные были извлечены правильно.

 

Теперь давайте проверим корреляцию между данными.

crypto[['BTC','ETH','DOGE','BNB','ADA','XRP','DASH']].corr()

Теперь у нас есть несколько интересных открытий. Все точки данных имеют высокую корреляцию друг с другом. Давайте просто сравним биткойн с другими, даже самая низкая корреляция с DOGE составляет 0,237, что является довольно хорошим значением. Dash, разветвленный из BTC, имеет самую высокую корреляцию с BTC на уровне 0,77.

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

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

Точно так же, когда упали значения BTC и DOGE, упали и другие. Это было похоже на цепную реакцию.

 

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

#Тепловая карта



plt.figure(figsize = (10,10))

sns.heatmap(crypto[['BTC','ETH','DOGE','BNB','ADA','XRP','DASH']].corr(),annot=True, cmap='Blues')

Тепловая карта четко показывает высокую корреляцию между ценами на все криптовалюты.

 

Построим данные с помощью Plotly Express.

fig = px.line(crypto, y=["BTC",'ETH','DOGE','BNB','ADA','XRP','DASH'] )

fig.show()

Что ж, ясен только обвал BTC в середине мая 2021 года. Но давайте посмотрим на значения 7-дневной скользящей средней BTC.

fig = px.line(crypto, y=['BTC_7DAY_MA'] )

fig.show()

В Plotly интересно то, что мы можем взаимодействовать с Plot и получать точные значения, как в Power BI.

Здесь хорошо видно, что цена BTC внезапно выросла в феврале 2021 года после всех этих твитов и шума в социальных сетях. И вдруг в мае 2021 года все рухнуло.

 

Давайте попробуем Ethereum.

fig = px.line(crypto, y=['ETH'] )

fig.show()

И очевидно, что ETH также следует аналогичной схеме. В конце апреля 2021 года все увидели резкий рост цен на BTC и DOGE и купили ETH. Это привело к внезапному росту цены ETH.

 

Значения скользящего среднего:

fig = px.line(crypto, y=['ETH_7DAY_MA'] )

fig.show()

Гора падала так же быстро, как и поднималась. Люди, купившие по высокой цене, понесли огромные убытки.

 

DOGE:

fig = px.line(crypto, y=['DOGE'] )

fig.show()

Взлеты и падения DOGE также интересны. В январе 2021 года DOGE была ничем, а в начале мая 2021 года она сильно выросла. И его падение тоже было внезапным.

 

Значения скользящего среднего:

fig = px.line(crypto, y=['DOGE_7DAY_MA'] )

fig.show()

Код для построения всех остальных данных почти такой же.

 

Вывод

Теперь мы в значительной степени понимаем, что вызвало сбой. Кажется, что весь рынок криптовалют связаны друг с другом. Люди видят, как кто-то покупает BTC, они идут покупать ETH. Кто-то продает DOGE, они также продают свои BTC. Все взаимосвязано.

Рынок криптовалют очень волатилен, различные факторы приводят к бешеной распродаже. Одна из крупнейших криптовалютных бирж в мире, Coinbase, столкнулась с перебоями в обслуживании во время этой распродажи. Многие инвесторы в криптовалюту инвестировали, потому что они думали, что Тесла и Илон Маск были в биткойнах, и думали об этом как о следующем шаге в области финансов и валюты.

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

 

Начало:



2021-07-23T09:40:30
Python

Анализ криптовалюты. Основы Python для финансов

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

Использование функций super в Python

Хотя Python не является строго объектно-ориентированным языком программирования, он достаточно силен и гибок, чтобы позволить вам использовать объектно-ориентированную модель для создания ваших программ. Python частично выполняет это, разрешая наследование, которое он обеспечивает через super(). Встроенный super() создает суррогатный объект (временный объект суперкласса), который мы можем использовать для доступа к функциям базового класса. Кроме того, метод super() предоставляет право на использование функций и атрибутов родительского или родственного класса. Работа с одновременным наследованием помогает нам избежать прямого использования имени родительского класса. В этой статье вы узнаете, как вторгнуться в суперкласс с помощью метода super().

 

Синтаксис:

super()

 

Установка Python:

Перед реализацией примеров Python у нас должен быть установлен пакет Python в нашей системе Ubuntu 20.04 Linux. Итак, войдите в систему из системы Linux и быстро откройте оболочку терминала с помощью «Ctrl + Alt + T». Но сначала мы должны проверить, какая версия Python уже установлена ​​в нашей системе. И для этого попробуйте запрос ниже. Как видите, теперь отображается последняя версия Python.

$ python3 --version

 

Узнав об этом, нам нужно сначала обновить наш репозиторий apt. Следовательно, попробуйте следующий запрос для обновления системы Linux:

$ sudo apt update

 

Через пакет PPA добавьте несколько дополнительных пакетов для Python:

$ sudo add-apt-repository ppa:deadsnakes/ppa

 

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

Пришло время установить последнюю версию Python в нашу систему Linux. Итак, попробуйте следующую инструкцию в консольной оболочке и нажмите клавишу Enter :

$ sudo apt install python3.9

 

Нажмите «Y», чтобы продолжить процесс установки, в противном случае нажмите клавишу «n», чтобы остановить его.

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

$ pip --version

 

Чтобы установить последнюю версию pip, нам понадобится пакет curl в нашей системе Linux. Итак, установите его с помощью следующего запроса:

$ sudo apt install curl

 

Загрузите пакет pip с помощью curl в консоли следующим образом:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

 

Проверьте список всех пакетов, начиная с ключевого слова «get».

$ ls get*

 

Теперь запустите пакет «get-pip.py», только что загруженный в систему с помощью запроса sudo. Установка может занять некоторое время.

$ sudo python3.9 get-pip.py

 

Приведенный ниже вывод показывает, что последняя версия пакета была установлена ​​эффективно.

Теперь вы можете проверить версию репозитория pip с помощью инструкции ниже:

$ pip3.9 --version

 

Супер пример 01:

Наконец, мы рассмотрим мини-пример суперфункции в Python. Итак, прежде всего, нам нужно создать файл расширения «py» из оболочки командной строки. Поэтому мы будем использовать следующий сенсорный запрос в оболочке вместе с именем файла как «one.py»:

$ touch one.py

 

Теперь откройте домашний каталог вашей системы из проводника. Вы найдете там файл «one.py». Откройте этот файл и добавьте к нему скрипт Python. Давайте сначала познакомимся с этим кодом. В самом начале мы создали родительский класс с именем «Animal» с конструктором в нем. Этот конструктор печатает имя любого животного и текст строки, который будет передан ему в параметре в ближайшем будущем. После этого мы создали два дочерних класса: «Bird» и «Other». Оба дочерних класса имеют в своем теле конструкторы, которые печатают некоторые операторы. Эти конструкторы вызывают инструктор суперкласса, передавая ему свое дочернее имя в качестве значения параметра. Из-за этого конструктор родительского класса будет запускаться и печатать инструкцию в своем теле вместе с именем дочернего класса. Объекты b1 и c1 использовались для вызова дочерних классов соответственно.

#!/usr/bin/env python3

class Animal(object):

def

init__(self, name):

print(name, 'это может быть любое животное. ')class Birds(Animal):

def init__(self):

print('У птиц есть перья. )

super().__init__('Birds')



class Other(Animal):

def __init__(self):

print('У животных четыре ноги.')

super().__init__('Other')



b1 = Birds()

o1 = Other()



Давайте выполним файл сценария Python, чтобы увидеть вывод кода. Для выполнения напишите в оболочке следующую инструкцию, перед которой стоит ключевое слово python3 вместе с именем файла «one.py». Приведенные ниже выходные данные указывают на первую строку из дочернего класса «Birds» и вторую строку из суперкласса «Animal». Третья строка указывает инструкцию из дочернего класса «Other», а четвертая строка — из суперкласса «Animal». И вторая, и четвертая строки содержат первое слово из значений параметров, переданных из дочерних классов.

$ python3 one.py

 

Супер пример 02:

Откройте тот же файл one.py и обновите код , добавив в него следующий код. Этот код содержит один родительский класс как «Human» и один дочерний класс как «Child». У родительского класса «Human» есть конструктор, устанавливающий прямые значения возраста, роста и цвета. Хотя у дочернего класса есть конструктор с одним дополнительным параметром, «name», он вызывает конструктор суперкласса для установки значений. Этот конструктор дочернего класса устанавливал переменную «name». Объект c1 используется для передачи значений в параметре конструктора дочернего класса. После этого четыре оператора печати использовались для печати значений всех параметров.

#!/usr/bin/env python3

class Human():

  def __init__(self, age, height, color):

    self. age = age

    self. height = height

    self. color = color





class Child(Human):

  def init__(self, age, height, color, name):

    super().__init__(age, height, color)

    self. name = name





c1 = Child(40, '70', 'white', 'AndreyEx')

print('Ребенку: ', c1. age, years')

print('Этот ребенок имеет рост: ', c1. height, inches.

print('Цвет ребенка: ', c1. color)

print('Это имя ребенка: ', c1. name)

 

Выполним файл с ключевым словом «python3» и именем файла «one.py». Попробуйте запрос ниже и нажмите кнопку «Enter». Вывод показывает четыре оператора печати, определенных вне обоих классов, например, child и parent. Нет проблем, если вы объявляете переменную в родительском или дочернем классе.

 

Заключение:

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



2021-06-19T20:41:23
Python

Как поймать все исключения в Python

Программисты часто классифицируют исключения как ошибки кода, которые приводят к ошибкам при каждом выполнении программы. Исключения представляют собой ошибки, возникающие в результате выполнения сценария. Некоторые программисты до сих пор не видят разницы между ошибками и исключениями. Большинство таких ошибок кажутся логичными. В Python исключения перехватываются с использованием простой логики. Каждый раз, когда интерпретатор Python обнаруживает исключение, он завершает рабочий процесс. Это решается путем выполнения процедуры вызова. Если этого не сделать, программа выйдет из строя. Чтобы различать ошибки и исключения, необходимо рассмотреть две категории ошибок:

  • Синтаксические ошибки
  • Логические ошибки (исключения)

 

Синтаксическая ошибка

Чтобы увидеть, как работают логические ошибки, мы должны сначала рассмотреть пример синтаксической ошибки. Откройте терминал оболочки, используя «Ctrl + Alt + T» на клавиатуре. После открытия оболочки мы создадим новый файл python. Чтобы создать файл, напишите нижеприведенный запрос, показанный на изображении, как есть.

$ touch test.py

 

Давайте откроем файл «test.py» из вашего локального домашнего каталога, дважды нажав на него. После того, как файл был открыт, напишите в нем приведенный ниже код как есть. Сначала вы должны понять этот код. Мы добавили в него поддержку Python. После этого мы инициализировали словарную переменную «age», чтобы добавить два ключа с двумя значениями. Мы не добавляли запятую между обоими ключами. Это будет наша синтаксическая ошибка во время выполнения. После этого мы распечатали ключ «Акса» и его значение из словаря. Сохраните файл с помощью Ctrl + S и нажмите кнопку с крестиком, чтобы выйти из него.

#!/usr/bin/python

ages = {'andreyex':2 'destr':4}

print(f' andreyex is {ages["andreyex"]} years old)

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

$ python3 test.py

 

Давайте просто быстро обновим код, добавив в оператор запятую, чтобы предотвратить синтаксические ошибки. Сохраните этот код и закройте его крестиком в правой части окна.

#!/usr/bin/python

ages = { andreyex':2, 'destr':43 }

print(f'andreyex is {ages["andreyex"]} years old')

 

Давайте снова запустим наш файл, чтобы увидеть результат по версии python3. Вывод снимка ниже показывает правильный вывод без синтаксических или логических ошибок.

$ python3 test.py

 

Логические ошибки

Логические ошибки — это те исключения, которые возникают во время выполнения из-за некоторой логической ошибки в нашем коде. В начале этого руководства мы упомянули одновременный захват всех исключений. Но чтобы понять эту концепцию, нам нужно сначала быстро взглянуть на перехват одного исключения за раз. Следовательно, откройте терминал оболочки и преобразуйте его в формат кода python3, чтобы использовать на нем python, используя запрос ниже, как показано на изображении.

$ python3

 

Теперь терминал готов к кодированию. Добавьте какое-нибудь утверждение, которое показывает в нем некоторую логическую ошибку. Допустим, мы добавили «2/0», что невозможно в математике. Таким образом, это должно вызвать некоторую логическую ошибку. Введите его в оболочку и нажмите Enter. Вывод показывает «ZeroDivisionError», потому что все, что делится на ноль, не может вернуть ответ.

>>> 2/0

 

Возьмем еще один пример перехвата единственного исключения на терминале. Откройте файл, который даже не создан или не найден в текущем локальном каталоге Linux, как показано ниже. Он вызовет исключение FileNotFoundError во время выполнения, потому что в нашей системе нет такого файла.

>>> open ( «two.txt» )

 

Пример: Catch-All Exceptions

Ну наконец то! Пришло время собрать все исключения в одном месте. Следовательно, откройте файл python test.py из текущего домашнего каталога системы Linux. Теперь напишите показанный ниже код. Этот код содержит список «l» с разными типами элементов. Мы использовали цикл for, чтобы получить каждое значение из списка и применить к нему оператор try. Оператор try сначала распечатает этот элемент из списка. Следующая строка сначала преобразует этот элемент в целочисленный тип, а затем разделит 1 на этот преобразованный элемент. После этого мы использовали оператор except, который распечатает имя исключения, возникшего из-за оператора try, используя метод sys.esc_info (). Будет напечатана еще одна строка, а затем после оператора «кроме» тело, мы инициализировали оператор печати, чтобы напечатать результат деления, которое было выполнено для проверки оператора. Нажмите Ctrl + S, чтобы сохранить файл, и нажмите кнопку с крестиком, чтобы быстро закрыть его. Теперь откройте терминал, чтобы увидеть, как работает наш код.

#!/usr/bin/python

import sys

l = ['z' , 1e-15, 8]

for result in l:

   try:

      print("В результате получается ", result)

      x = 1/int(result)

      break

   except:

      print("Вао!", sys. exc_info()[0], "occurred.")

      print("Следующее значение, пожалуйста.)

      print()

print("The result of"  result, "is", x)

 

Выполните запрос ниже, чтобы запустить этот файл. Выходные данные показывают результат использования оператора print «Результат» в операторе «try» для каждого элемента списка. Поскольку первые два элемента списка являются строковыми и многотипными переменными, деление не происходит. Это приводит к разным ошибкам. Первый оператор значения «except» был выполнен и показывает имена ошибок с использованием метода sys.exc_info (). В связи с исключением, третий оператор печати из предложения «except» будет выполнен для обоих первых двух элементов списка. Но вы можете видеть в выводе, что результат для третьего значения не вызывает никаких исключений. Это потому, что третий элемент списка является целым числом, и его можно идеально разделить на 1. В этом случае оператор except не выполнялся; таким образом, управление было передано самому внешнему оператору печати.

 

Заключение

В этой статье мы рассмотрели синтаксические и логические ошибки. Наиболее важно то, что в нашей статье мы обсудили метод перехвата всех исключений с помощью метода «sys.exc_info()».



2021-06-19T12:29:46
Python

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

Программирование сокетов — это метод, позволяющий двум узлам в сети взаимодействовать друг с другом. Один сокет (узел) читает с определенного порта по IP-адресу. Между тем, первое с ним связано. Клиент подключается к серверу, и сервер создает сокет аудитора. Это настоящие основы онлайн-серфинга.

Проще говоря, сервер действительно существует, а также клиент. Интеграция пакета сокетов и создание базового сокета — это первые шаги в программировании сокетов. На момент написания этой статьи мы использовали систему Ubuntu 20.04 Linux. Вот несколько примеров программирования сокетов в Python.

 

Пример 01: подключение Socket к Google

В нашем первом примере будет использоваться сокет для подключения к Google. Поэтому перейдите в область приложения и найдите «terminal» в строке поиска, чтобы открыть. Если вам трудно открыть, просто нажмите клавишу «Ctrl + Alt + T», и терминал откроется.

Теперь после открытия терминала нам нужно создать новый файл с поддержкой Python, чтобы добавить в него скрипт Python для программирования сокетов. Следовательно, мы создали файл « test.py » с помощью следующей команды touch:

$ touch test.py

 

Давайте перейдем к домашнему каталогу нашей системы, чтобы открыть только что созданный файл. После того, как вы открыли файл, добавьте в него приведенный ниже скрипт python для подключения сокета к Google. Сначала мы добавили поддержку Python в этот файл. Затем мы импортировали в нее системную библиотеку «sys» и библиотеку «socket». После этого мы использовали оператор try для создания сокета. В 5-й строке мы создали объект для класса сокета, который используется для создания сокета с потоком. Если созданный сокет завершится, он выведет сообщение об успешном завершении. В противном случае будет выполнен оператор except, показывающий сообщение об ошибке создания сокета.

После этого мы создали переменную «port», чтобы присвоить ей значение «80». Другой оператор try использовался для получения IP-адреса хоста, с которым мы подключаем наш сокет, например Google, в нашем случае. Оператор try получает IP-адрес через функцию класса сокета «gethostbyname». Если получение IP-адреса прошло успешно, управление будет передано оператору печати, расположенному за пределами тела try-except, и сообщение об успешном завершении будет отображаться на терминале. С другой стороны, если получение IP-адреса окажется неудачным, он напечатает сообщение об ошибке и завершит процесс. Сохраните файл и оставьте его, чтобы перейти к терминалу.

test.

#!/usr/bin/python3

import socket

import sys

try:

s = socket.socket(socket.AF_INET, socket. SOCK_STREAM) 

print("Сокет успешно создан")

except socket.error as err:

print("создание сокета не удалось с ошибкой %s" %(err))

port = 80

try:

host_ip = socket.gethostbyname('www.google.com')

except socket.gaierror:

print("произошла ошибка при разрешении хоста")

sys.exit()

s.connect((host_ip, port))

print("Сокет успешно подключился к Google")

Давайте запустим этот файл через поддержку python3 в оболочке, как показано ниже. Вы можете видеть, что сокет был успешно подключен к Google, поскольку отображаются сообщения об успешном завершении.

$ python3 test.py

Пример 02: Простое соединение сервер-клиент

Давайте рассмотрим еще один простой пример соединения сервера и клиента друг с другом через программирование сокетов. Давайте сначала создадим новый файл « Server.py » с расширением python в вашем домашнем каталоге с помощью представленной ниже команды.

$ touch Server.py

 

Откройте файл и вставьте в него приведенный ниже код. Этот код сначала импортирует библиотеку сокетов, а затем создает сокет с помощью объекта « s », за которым следует сообщение об успешном завершении. Затем мы упомянули переменную « порт », чтобы добавить номер порта и связать этот номер порта с нашим объектом сокета « s », за которым следует сообщение об успешном связывании. Мы перевели наш сокет в режим прослушивания методом listen . Затем мы создали вечный цикл while, чтобы установить соединение с клиентом с помощью метода accept (), пока мы не прервем его или не произойдет какая-либо ошибка.

Переменная « addr » представляет адрес клиента. Мы объявили переменную « var » с некоторым сообщением для отправки клиенту. Но перед этим мы должны закодировать байтовые символы. Следовательно, мы использовали для этого метод encode (). Мы использовали метод send (), чтобы отправить сообщение клиенту и закрыть соединение. Сохраните файл и нажмите крестик, чтобы выйти из него.

*Server.py

#!/usr/bin/python3

import sockets = socket. socket()

print("Сокет успешно создан")

port = 12345

s.bind(('', port))

print("гнездо, привязанное к %s" %(port))

s. listen(5)

print("сокет слушает")

while True:

c.addr = s.accept()

print('Получил связь от", addr )

var = "Спасибо за подключение"

new = var.encode("ascii")

c.send(new)

c.close()



Проверьте, правильно ли работает и активен наш сервер. Для этого вы запустите файл «Server.py» в терминале командной оболочки следующим образом:

$ python3 Server.py

 

Он успешно создал сокет и правильно его слушает. Теперь, чтобы проверить, работает он или нет, нам нужно подключить его к другому хосту. Следовательно, мы собираемся использовать для этого «telnet».

Откройте другое окно терминала и напишите в нем запрос ниже. Вы увидите, что он подключится к телнету, одновременно показывая вам сообщение «Спасибо за подключение». Это означает, что наш сервер исправен.

$ telnet localhost 12345

 

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

Создадим еще один файл для программирования сокетов на стороне клиента, например Client.py, следующим образом:

$ touch Client.py

 

Быстро откройте файл из домашнего каталога и напишите в нем приведенный ниже код без каких-либо различий. Мы импортировали библиотеку сокетов и создали сокет с помощью метода «socket». Порт был упомянут в переменной «порт», и соединение было установлено через объект «s» и метод «connect с указанным портом». Метод recv использовался для получения данных с сервера и их печати с последующим закрытием соединения.

*Client.py

#!/usr/bin/python3

import sockets = socket.socket()

port = 12345

s.connect(('127.0.0.1', port))

print(s.recv(1024))

s.close()



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

$ python Sevrer.py

 

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

$ python3 Client.py

 

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

 

Заключение:

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



2021-06-15T12:06:17
Python