Forwarded from Zen of Python
Создание виртуального помощника с помощью Python
Автор статьи создал демо-версию TARS из фильма «Интерстеллар». TARS способен автоматизировать различные задачи, такие как поиск видео на YouTube и их воспроизведение, отправка электронных писем, поиск материалов в Википедии и их чтение и многое другое.
Как сделать себе такого же помощника читайте здесь:
https://tprg.ru/yrSp
Автор статьи создал демо-версию TARS из фильма «Интерстеллар». TARS способен автоматизировать различные задачи, такие как поиск видео на YouTube и их воспроизведение, отправка электронных писем, поиск материалов в Википедии и их чтение и многое другое.
Как сделать себе такого же помощника читайте здесь:
https://tprg.ru/yrSp
Forwarded from Zen of Python
Что такое дескрипторы и их использование в Python 3.6+
Дескрипторы редко используются в Pyhton-проектах напрямую, но крайне часто через сторонние библиотеки. Обычно они необходимы при создании фреймворка или ORM, а ещё на собеседованиях любят задавать вопросы о них.
В этой статье автор постарался максимально понятно объяснить что же такое дескриптор, зачем он нужен и где применяется:
https://tprg.ru/AtwB
Дескрипторы редко используются в Pyhton-проектах напрямую, но крайне часто через сторонние библиотеки. Обычно они необходимы при создании фреймворка или ORM, а ещё на собеседованиях любят задавать вопросы о них.
В этой статье автор постарался максимально понятно объяснить что же такое дескриптор, зачем он нужен и где применяется:
https://tprg.ru/AtwB
Forwarded from Zen of Python
Создаём Telegram бота с помощью Python
Telegram обладает множеством возможностей. Одна из них — это использование крутых ботов на все случаи жизни.
Прочитав эту статью, вы пошагово научитесь создавать своих собственных ботов:
https://tprg.ru/MTxY
Telegram обладает множеством возможностей. Одна из них — это использование крутых ботов на все случаи жизни.
Прочитав эту статью, вы пошагово научитесь создавать своих собственных ботов:
https://tprg.ru/MTxY
Forwarded from Zen of Python
5 способов отладки с IPython
Существуют разные способы отладки кода, начиная от повсеместного использования
Автор этой статьи остановился на использовании IPython для отладки и обосновывает свой выбор различными примерами:
https://tprg.ru/JOr7
Существуют разные способы отладки кода, начиная от повсеместного использования
print
и заканчивая отладчиком, встроенным в среду разработки.Автор этой статьи остановился на использовании IPython для отладки и обосновывает свой выбор различными примерами:
https://tprg.ru/JOr7
Forwarded from Zen of Python
Каверзные вопросы по Python
Принято считать, что Python очень лёгок в освоении по сравнению с другими языками программирования. Но и здесь есть чему удивляться и где можно наделать ошибок.
Четыре вопроса с неочевидными ответами в этой статье:
https://tprg.ru/Y31t
Принято считать, что Python очень лёгок в освоении по сравнению с другими языками программирования. Но и здесь есть чему удивляться и где можно наделать ошибок.
Четыре вопроса с неочевидными ответами в этой статье:
https://tprg.ru/Y31t
Forwarded from Zen of Python
10 полезных советов для начинающих изучать Django
Как использовать относительные пути в конфигурации, Django debug toolbar, а также другие советы и рекомендации для быстрого освоения Django:
https://tprg.ru/b6lv
#django
Как использовать относительные пути в конфигурации, Django debug toolbar, а также другие советы и рекомендации для быстрого освоения Django:
https://tprg.ru/b6lv
#django
Forwarded from Zen of Python
Руководство по веб-скрепингу на Python
Автор статьи рассказывает о разнообразных приёмах и хитростях, которые он использует для автоматизированного извлечения данных с сайтов, или веб-скрепинга:
https://tprg.ru/SQOy
Автор статьи рассказывает о разнообразных приёмах и хитростях, которые он использует для автоматизированного извлечения данных с сайтов, или веб-скрепинга:
https://tprg.ru/SQOy
Forwarded from Python Academy
Дескрипторы
Дескриптор – это атрибут объекта со “связанным поведением”, то есть такой атрибут, при доступе к которому его поведение переопределяется методом протокола дескриптора. Если хотя бы один из этих методов определен в объекте, то можно сказать, что этот метод – дескриптор.
Для того, чтобы определить свой собственный дескриптор, обычно определяют три специальных метода класса
У данного объекта будет переопределено поведение при доступе к атрибуту (
#классы #дескрипторы
Дескриптор – это атрибут объекта со “связанным поведением”, то есть такой атрибут, при доступе к которому его поведение переопределяется методом протокола дескриптора. Если хотя бы один из этих методов определен в объекте, то можно сказать, что этот метод – дескриптор.
Для того, чтобы определить свой собственный дескриптор, обычно определяют три специальных метода класса
__get__
, __set__
или __delete__
. После этого можно создать новый класс и в атрибут этого класса записать объект типа дескриптор.У данного объекта будет переопределено поведение при доступе к атрибуту (
__get__
), при присваивании значений (__set__
) или при удалении (__delete__
).#классы #дескрипторы
Forwarded from Python Academy
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня хочу посоветовать вам канал PYTHON:TODAY, с помощью которого вы освоите одну из самых топовых профессий в мире и сможете работать хоть из дома, хоть из Тайланда.
На канале вы найдете видео и текстовые трансляции уроков:
✔️ По созданию ботов
✔️ Приложений на смартфон
✔️ Парсингу сайтов
✔️ Шифрованию
✔️ Машинному обучению и big data с нуля
✔️ Пентестингу
📣 Качай гигабайты полезной литературы по программированию и задавай вопросы в клубе!
Вступай в клуб разработчиков!
На канале вы найдете видео и текстовые трансляции уроков:
✔️ По созданию ботов
✔️ Приложений на смартфон
✔️ Парсингу сайтов
✔️ Шифрованию
✔️ Машинному обучению и big data с нуля
✔️ Пентестингу
📣 Качай гигабайты полезной литературы по программированию и задавай вопросы в клубе!
Вступай в клуб разработчиков!
Forwarded from Python Academy
Создание дочернего процесса
Метод
Кстати, получается интересный случай, в коде примера выполняется и блок
#os #fork #процессы
Метод
os.fork()
создаёт дочерний процесс в том же месте кода, вызывая системную функцию fork()
, и возвращает PID (Process Identifier), который равен PID дочернего процесса в родительском процессе и нулю в новом.Кстати, получается интересный случай, в коде примера выполняется и блок
if
, и else
. Если не знать про os.fork()
и посмотреть вывод подобного кода, то возникнет много вопросов.#os #fork #процессы
Forwarded from Инжиниринг Данных (Dmitry Anoshin)
Заказал книжку с многообещающим названием - Data Engineering with Python.
Forwarded from Zen of Python
Подготовили для вас подборку статей, которые помогут легче начать свой путь программиста на Python, ведь тут вы узнаете:
— основные типы данных в Python: https://tprg.ru/7yw8
— какие встроенные функции нужно знать, а на какие не стоит тратить время: https://tprg.ru/DkFR
— зачем нужны функции с переменным количеством переменных и как ими пользоваться: https://tprg.ru/McGU
— что такое словари и что с ними делать: https://tprg.ru/U0I7
— как работают алгоритмы сортировки: https://tprg.ru/VHC5
— как работают импорты в Python: https://tprg.ru/3mRr
— зачем нужны декораторы и как ими пользоваться: https://tprg.ru/NoFh
— основные типы данных в Python: https://tprg.ru/7yw8
— какие встроенные функции нужно знать, а на какие не стоит тратить время: https://tprg.ru/DkFR
— зачем нужны функции с переменным количеством переменных и как ими пользоваться: https://tprg.ru/McGU
— что такое словари и что с ними делать: https://tprg.ru/U0I7
— как работают алгоритмы сортировки: https://tprg.ru/VHC5
— как работают импорты в Python: https://tprg.ru/3mRr
— зачем нужны декораторы и как ими пользоваться: https://tprg.ru/NoFh
'''import os, io
import errno
import urllib
import urllib.request
import hashlib
import re
import requests
from time import sleep
from google.cloud import vision
from google.cloud.vision import types
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import pandas as pd
from ast import literal_eval
from cdqa.utils.filters import filter_paragraphs
from cdqa.utils.download import download_model, download_bnpp_data
from cdqa.pipeline.cdqa_sklearn import QAPipeline
from cdqa.utils.converters import pdf_converter
result_urls = []
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'your_private_key.json'
client = vision.ImageAnnotatorClient()
FILE_NAME = 'your_image_file.jpg'
with io.open(os.path.join(FILE_NAME), 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations[0]
# print(texts.description)
if '?' in texts.description:
question = re.search('([^?]+)', texts.description).group(1)
elif ':' in texts.description:
question = re.search('([^:]+)', texts.description).group(1)
elif '\n' in texts.description:
question = re.search('([^\n]+)', texts.description).group(1)
slugify_keyword = urllib.parse.quote_plus(question)
# print(slugify_keyword)
def crawl_result_urls():
req = Request('https://google.com/search?q=' + slugify_keyword, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
results = bs.find_all('div', class_='ZINbbc')
try:
for result in results:
link = result.find('a')['href']
print(link)
if 'url' in link:
result_urls.append(re.search('q=(.*)&sa', link).group(1))
except (AttributeError, IndexError) as e:
pass
def get_result_details(url):
try:
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
try:
title = bs.find(re.compile('^h[1-6]$')).get_text().strip().replace('?', '').lower()
# Set your path to pdf directory
filename = "/path/to/pdf_folder/" + title + ".pdf"
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename))
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
with open(filename, 'w') as f:
for line in bs.find_all('p')[:5]:
f.write(line.text + '\n')
except AttributeError:
pass
except urllib.error.HTTPError:
pass
def find_answer():
# Set your path to pdf directory
df = pdf_converter(directory_path='/path/to/pdf_folder/')
cdqa_pipeline = QAPipeline(reader='models/bert_qa.joblib')
cdqa_pipeline.fit_retriever(df)
query = question + '?'
prediction = cdqa_pipeline.predict(query)
# print('query: {}\n'.format(query))
# print('answer: {}\n'.format(prediction[0]))
# print('title: {}\n'.format(prediction[1]))
# print('paragraph: {}\n'.format(prediction[2]))
return prediction[0]
crawl_result_urls()
for url in result_urls[:3]:
get_result_details(url)
sleep(5)
answer = find_answer()
print('Answer: ' + answer)'''
import errno
import urllib
import urllib.request
import hashlib
import re
import requests
from time import sleep
from google.cloud import vision
from google.cloud.vision import types
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import pandas as pd
from ast import literal_eval
from cdqa.utils.filters import filter_paragraphs
from cdqa.utils.download import download_model, download_bnpp_data
from cdqa.pipeline.cdqa_sklearn import QAPipeline
from cdqa.utils.converters import pdf_converter
result_urls = []
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'your_private_key.json'
client = vision.ImageAnnotatorClient()
FILE_NAME = 'your_image_file.jpg'
with io.open(os.path.join(FILE_NAME), 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations[0]
# print(texts.description)
if '?' in texts.description:
question = re.search('([^?]+)', texts.description).group(1)
elif ':' in texts.description:
question = re.search('([^:]+)', texts.description).group(1)
elif '\n' in texts.description:
question = re.search('([^\n]+)', texts.description).group(1)
slugify_keyword = urllib.parse.quote_plus(question)
# print(slugify_keyword)
def crawl_result_urls():
req = Request('https://google.com/search?q=' + slugify_keyword, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
results = bs.find_all('div', class_='ZINbbc')
try:
for result in results:
link = result.find('a')['href']
print(link)
if 'url' in link:
result_urls.append(re.search('q=(.*)&sa', link).group(1))
except (AttributeError, IndexError) as e:
pass
def get_result_details(url):
try:
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
bs = BeautifulSoup(html, 'html.parser')
try:
title = bs.find(re.compile('^h[1-6]$')).get_text().strip().replace('?', '').lower()
# Set your path to pdf directory
filename = "/path/to/pdf_folder/" + title + ".pdf"
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename))
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
with open(filename, 'w') as f:
for line in bs.find_all('p')[:5]:
f.write(line.text + '\n')
except AttributeError:
pass
except urllib.error.HTTPError:
pass
def find_answer():
# Set your path to pdf directory
df = pdf_converter(directory_path='/path/to/pdf_folder/')
cdqa_pipeline = QAPipeline(reader='models/bert_qa.joblib')
cdqa_pipeline.fit_retriever(df)
query = question + '?'
prediction = cdqa_pipeline.predict(query)
# print('query: {}\n'.format(query))
# print('answer: {}\n'.format(prediction[0]))
# print('title: {}\n'.format(prediction[1]))
# print('paragraph: {}\n'.format(prediction[2]))
return prediction[0]
crawl_result_urls()
for url in result_urls[:3]:
get_result_details(url)
sleep(5)
answer = find_answer()
print('Answer: ' + answer)'''
Forwarded from Pythonist.ru - образование по питону
Топ. Пишем на Python бота, который может решить любой вопрос с вариантами ответа по картинке [с кодом]
В этой статье:
- Vision AI,
- поиск вопроса в Google,
- сканирование информации (при помощи BeautifulSoup).
Читать статью
#топ
В этой статье:
- Vision AI,
- поиск вопроса в Google,
- сканирование информации (при помощи BeautifulSoup).
Читать статью
#топ
Forwarded from Python Lounge: работа и стажировки для программистов
📌Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
✅Результат:
🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
✅Результат:
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
sum(iterable, start)
Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
numbers = [1,5,5]
#парметр start передается со значением по умолчанию(0).
numbers_sum = sum (numbers);
print (numbers_sum)
# парметр start передается со значением 7.
numbers_sum = sum (numbers, 7)
print (numbers_sum)
✅Результат:
11
18
🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
sum(iterable , start)
, нужно вместе c import math
добавить следующую строку. math.fsum(iterable).
Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
myTuple = ("Python", "Lounge", "is", "the","best")
x = " ".join(myTuple)
print (x)
✅Результат:
Python Lounge is the best
Forwarded from Python Lounge: работа и стажировки для программистов
📌ДИНАМИЧЕСКИЕ АТТРИБУТЫ ДЛЯ ОБЪЕКТОВ
Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
Когда мы вызваем что-то вроде
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод
Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".
✅Ниже показано определение метода
Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.
Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
__getattr__
.Когда мы вызваем что-то вроде
<myobject>.<myattribute>
,Python будет искать <myattribute>
в библиотеке объекта, вызвав __getattribute__
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод
__getattr__
вызывается , получая имя аттрибута (myattribute) как параметр.Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".
✅Ниже показано определение метода
__getattr__
.class DynamicAttributes:
def __init__(self, attribute):
self.attribute = attribute
def __getattr__(self, attr):
if attr.startswith("fallback_"):
name = attr.replace("fallback_", "")
return f"[fallback resolved] {name}"
raise AttributeError(f"{self.__class__.__name__} has no attribute {attr}")
Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.