Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Python для новичков » PyAudio и Portaudio установка в Ubuntu  » Авг. 3, 2019 14:11:02

Появилась необходимость создать программу распознавания речи. Для этих целей был выбран SpechRecognition. Он требует PyAudio, а этот в свою очередь - PortAudio. С этим и приключилась проблема. Для установки PortAudio использовал brew
 brew install portaudio 
Встал без ошибок. Но при повторной попытке установки PyAudio выбивает ту же ошибку. Pip упорно не видит portaudio. Что делать, господа?

Python для новичков » Selenium, куки и танцы с бубном » Июль 28, 2019 15:57:08

Вначале расскажу про танцы с бубном.
Продолжаю шаманить с Selenium и дошло дело до кук. И вот тут началось.
Задача, впихнуть куки не браузера на сайт, а свои… например на сайт yandex.ru/internet/ зайти под куками
 coockie = {'yandexuid': '5702666281564305746'}
Через requests Это довольно просто делается.
а вот в Selenium нужно написать
 browser.add_cookie(coockie)
И при этом переменная coockie должна быть не просто словарем, а определенного параметра
 coockie = {'domain': 'yandex.ru', 'expiry': 4534445654, 'httpOnly': False, 'name': 'yandexuid', 'path': '/', 'secure': False, 'value': '5702666281564305746'}

Но это понятно, первый вопрос:
в словаре “expiry” что это? Что самое интересное, если зайти на сайт и сохранить куки, expiry будет типа флоат. А если отправить куки, то флоат не катит, нужны именно целые числа. Почему так, ХЗ.

Второй вопрос то же довольно интересный, вот код:
 from selenium import webdriver
coockie = {'domain': 'yandex.ru', 'expiry': 4534445654, 'httpOnly': False, 'name': 'yandexuid', 'path': '/', 'secure': False, 'value': '5702666281564305746'}
browser = webdriver.Chrome()
browser.get('https://yandex.ru/internet/')
browser.add_cookie(i)
print(browser.get_cookies())

Так вот, при таком коде, browser.get_cookies() возращает то, что отправил.
Но при этом открывается окошко браузера, с инфой у куках, и что интересное, пишет что ‘yandexuid’: ‘рандомное число, совсем не то что отправлял’

Долго я думал, как так может, одновременно, два разных значения кук.
Думал, может сначала объекту browser добавить куки, а потом уж только отправлять get запрос.
Нет, ругается.
Как оказалось, при случайном обновлении браузера, все стало на место. то есть сначало показывает рандомное число, обнавляешь в ручную, и начинает показывать сайт yandex.ru/internet/ то что нужно.
Странная штука.

Решил это так:
 from selenium import webdriver
coockie = [{'domain': 'yandex.ru', 'expiry': 4534445654, 'httpOnly': False, 'name': 'yandexuid', 'path': '/', 'secure': False, 'value': '5702666281564305746'}]
browser = webdriver.Chrome()
browser.get('https://mail.ru')
browser.add_cookie(i)
browser.get('https://yandex.ru/internet/')
print(browser.get_cookies())

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

Python для новичков » Изменение времени в windows и часовой пояс » Июль 27, 2019 17:15:25

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

Python для новичков » Подскажите пожалуйста » Июль 25, 2019 11:59:51

Господа, подскажите пожалуйста как можно реализовать следующую задачу:
Есть скрипт:
str = “f54a5851e9372b87810a8e60cdd2e7cfd80b6e31”
dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 50000)
binascii.hexlify(dk)
print(binascii.hexlify(dk))
Необходимо:
1) Чтобы итерации происходили до конечного результата 0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98, после которого отображался номер итерации на котором получили данный результат.
2) Чтобы результат итерации содержал длину только 63 знака.

Python для новичков » Игра на Python помогите новичку » Июль 24, 2019 16:33:14

При попадании в одного из противником все почему то улетают за пределы окна, в модуле alen.py есть фуекция проверки выхода противников за пределы при выходе возвращает true, в модуле game.function aфунция перебирающая все спрайты и если alien.check_edges() tRUE ТО МЕНЯЕТСЯ НАПРАВЛЕНИЕ И ВЫСОТА ВСЕХ СПРАЙТОВ , КОГДА НЕ СТРЕЛЯЕШЬ ВСЕ НОРМ , ПРИ ПОПАДАНИИ УЛЕТАЮТ ЗА ПРЕДЕЛЫ ЭКРАНА! ПОЧЕМУ ??? БИБЛИОТЕКА pygame ,из книги Eric_Matthes_Izuchaem_Python.
def check_fleet_edges(ai_settings, aliens,alien):
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens,alien)
print(alien.check_edges())
break
def change_fleet_direction(ai_settings, aliens,alien):

for alien in aliens.sprites():
ai_settings.fleet_direction *= -1
alien.rect.y += ai_settings.fleet_drop_speed
def update_aliens(aliens,ai_settings,alien):
check_fleet_edges(ai_settings, aliens,alien)
aliens.update()

Ссылка на гитхаб

Python для новичков » win32crypt » Июль 21, 2019 10:45:40

ERROR: Could not find a version that satisfies the requirement win32crypt (from versions: none)
ERROR: No matching distribution found for win32crypt
Помогите, что делать?

Центр помощи » Как прикрепить pyautogui события к pyvirtualdisplay? » Июль 19, 2019 14:14:02

В примере моего кода pyautogui события всегда срабатывают на верхнем дисплее.
Возможно ли иметь управление pyautogui на каждом дисплее?
 import os
from pyvirtualdisplay import Display
import Xlib.display
# ...
# функция запускается в многопоточном режиме
def do_work(data):
    v_display = Display(visible=0, size=(900, 600))
    v_display.start()
    import pyautogui
    print(v_display)
    pyautogui._pyautogui_x11._display = Xlib.display.Display(os.environ['DISPLAY'])
    print(pyautogui._pyautogui_x11._display)
    pyautogui.click(x=880, y=580)
    # Клик всегда проходит по верхнему дисплею
    v_display.stop()

Output:
 <Display cmd_param=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '900x600x24', ':1086'] cmd=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '900x600x24', ':1086'] oserror=None return_code=None stdout="None" stderr="None" timeout_happened=False>
<Display cmd_param=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '900x600x24', ':1087'] cmd=['Xvfb', '-br', '-nolisten', 'tcp', '-screen', '0', '900x600x24', ':1087'] oserror=None return_code=None stdout="None" stderr="None" timeout_happened=False>
<Xlib.display.Display object at 0x7f4f5493aa90>
<Xlib.display.Display object at 0x7f4f5493a8d0>

GUI » Python Kivy риложение останавливается на создании окна » Июль 19, 2019 11:35:27



Есть программа на python kivy. При запуске из терминала она зависает на

 mike@mike-MS-7740:/media/mike/189860AB98608958/mike2804/Документы/bot/codes$ python3 interface.py
[INFO   ] [Logger      ] Record log in /home/mike/.kivy/logs/kivy_19-07-18_20.txt
[INFO   ] [Kivy        ] v1.11.1
[INFO   ] [Kivy        ] Installed at "/usr/local/lib/python3.6/dist-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
[INFO   ] [Python      ] Interpreter at "/usr/bin/python3"
[INFO   ] [Logger      ] Purge log fired. Analysing...
[INFO   ] [Logger      ] Purge 2 log files
[INFO   ] [Logger      ] Purge finished!
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Window      ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used <sdl2>
[INFO   ] [GL          ] OpenGL version <b'3.1 Mesa 19.0.2'>
[INFO   ] [GL          ] OpenGL vendor <b'X.Org'>
[INFO   ] [GL          ] OpenGL renderer <b'AMD BARTS (DRM 2.50.0 / 4.18.0-25-generic, LLVM 8.0.0)'>
[INFO   ] [GL          ] OpenGL parsed version: 3, 1
[INFO   ] [GL          ] Shading version <b'1.40'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <16>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
xclip version 0.12
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL
[INFO   ] [Clipboard   ] Provider: xclip
[INFO   ] [CutBuffer   ] cut buffer support enabled

открывая окно программы без вложенных элементов. После этого пока я не нажму CTRL+C в терминале, программа не запускается. А после нажатия программа запускается и работает нормально

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

 mike@mike-MS-7740:/media/mike/189860AB98608958/mike2804/Документы/bot/codes$ python3 interface.py
[INFO   ] [Logger      ] Record log in /home/mike/.kivy/logs/kivy_19-07-18_22.txt
[INFO   ] [Kivy        ] v1.11.1
[INFO   ] [Kivy        ] Installed at "/usr/local/lib/python3.6/dist-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
[INFO   ] [Python      ] Interpreter at "/usr/bin/python3"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Window      ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used <sdl2>
[INFO   ] [GL          ] OpenGL version <b'3.1 Mesa 19.0.2'>
[INFO   ] [GL          ] OpenGL vendor <b'X.Org'>
[INFO   ] [GL          ] OpenGL renderer <b'AMD BARTS (DRM 2.50.0 / 4.18.0-25-generic, LLVM 8.0.0)'>
[INFO   ] [GL          ] OpenGL parsed version: 3, 1
[INFO   ] [GL          ] Shading version <b'1.40'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <16>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
xclip version 0.12
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL
[INFO   ] [Clipboard   ] Provider: xclip
[INFO   ] [CutBuffer   ] cut buffer support enabled
^C[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
[INFO   ] [WindowSDL   ] exiting mainloop and closing.
[INFO   ] [Base        ] Leaving application in progress...

код программы

 from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.config import Config
import time
import random
import scenary
import telebot
Config.set('graphics', 'resizable', 0)
Config.set('graphics', 'width', '260')
Config.set('graphics', 'height', '360')
#varibles
run = 0
fl = FloatLayout()
gl = GridLayout(cols=2,
    size_hint=(.95, .08),
    pos=(260/2/2/2/2/2/1.5, 360/2/2))
ti = TextInput(font_size=15,) #полле ввода шаблонов - сообщений
start = Button(text="СТАРТ!!!",
    font_size=20,
    background_color=[0, 0, 1, 1],
    background_normal='',
    pos=(260/2/2, 360/3/3),
    size_hint=(.5, .10)
    )#кнопка "старт"
Add = Button(text="Добавить",
    font_size=15,
    background_color=[0, 0, 1, 1],
    background_normal='',
    size_hint=(.45, .10),
    )#кнопка "добавить"
save = Button(text="СОХРАНИТЬ",
    font_size=15,
    background_color=[0, 0, 1, 1],
    background_normal='',
    pos=(260/2/1.5, 360/1.5),
    size_hint=(.35, .10)
    )#кнопка "сохранить"
rand1 = random.randint(60, 3540)
randm = 0
bot = telebot.TeleBot('624792720:AAFwShnw2uzAZxjM2XWsxdl0DcV4bZ0qaWQ') #Подключение к нужному боту
class myapp(App):
    def build(self): #метод былд отрисовывающий все виджеты
        fl.add_widget(gl)
        fl.add_widget(start)
        fl.add_widget(save)
        gl.add_widget(ti)
        gl.add_widget(Add)
        start.bind(on_press=self.btn_start_pressed)
        save.bind(on_press=self.btn_save_pressed)
        Add.bind(on_press=self.btn_add_pressed)
        return fl
    def btn_start_pressed(self, instance): #функция выполняемая при нажатии на кнопку "старт"
        self.send_text()
        if instance.text == "СТАРТ!!!":
            instance.text = "СТОП..."
            run = True
        else:
            instance.text = "СТАРТ!!!"
            run = False
    def btn_add_pressed(self, instance): #функция выполняемая при нажатии на кнопку "добавить"
        scenary.scen.append(ti.text)
        ti.text = ""
    def btn_save_pressed(self, instance): #функция выполняемая при нажатии на кнопку "сохранить"
        fi = open ('scenary.py', 'w')
        fi.write("scen = ")
        fi.write(str(scenary.scen))
        fi.close()
    #конструкция отправки/принятия сообщений
    @bot.message_handler(content_types=['text', 'start']) #определение типа отправляемого сообщения
    def send_text(self): #функция отправляющяя сообщения
        while run == True:
            randm = random.choice(scenary.scen)
            rand1 = random.randint(60, 3540)
            bot.send_message(message.from_user.id, randm)
            time.sleep(rand1)
    bot.polling()
if __name__ == '__main__':
    myapp().run()
OS: UBUNTU 18.04
DE: GNOME Shell
Python: 3.6.8

зарание спасибо!

Центр помощи » Голосовой ассистент , не могу понять как исправить ошибки(пункт 5)  » Июль 18, 2019 11:21:03

1. Python 3.6
2. Mac OC
3. Код: https://github.com/MarkStav/Python-projects/pull/1/commits/40b8a95ef56f9eabe63d6caf1fddd01202d92cbb
4. Скачанные библиотеки:
fuzzywuzzy 0.17.0, SpeechRecognition 3.8.1, pyttsx3 2.71, PyAudio 0.2.11
5. Ошибки:
Traceback (most recent call last):
File “/Users/markgurianov/Documents/Python/main.py”, line 82, in <module>
with m as sours:
File “/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- packages/speech_recognition/__init__.py”, line 141, in __enter__
input=True, # stream is an input stream
File “/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pyaudio.py”, line 750, in open
stream = Stream(self, *args, **kwargs)
File “/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pyaudio.py”, line 441, in __init__
self._stream = pa.open(**arguments)
OSError: Invalid number of channels

GUI » wx.FontPickerCtrl (win) как получить и/или установить цвет шрифта? [решено] » Июль 17, 2019 10:33:21

wx.FontPickerCtrl (win) как получить и/или установить цвет шрифта?
*.GetClassDefaultAttributes().colFg выдает свойства окна (цвет)
а не выбранный в wx.FontPickerCtrl цвет шрифта
———————————————————————————————-
в общем решено(обойдено), пришлось отказаться от wx.FontPickerCtrl
в пользу wx.FontDialog (повешеный на event кнопки) не очень конечно, но работает.
примерно так

 #создаем об'ект шрифта
font = wx.Font(pointSize=24, family=wx.FONTFAMILY_DEFAULT,
                        style=wx.NORMAL, weight=wx.FONTWEIGHT_BOLD,
                        face="Calibri")
#создам об'ект (хранилище) для шрифта
m = wx.FontData()
#устанавливаем шрифт по умолчанию
m.SetInitialFont(font)
#устанавливаем свойства шрифта (цвет)
m.SetColour(wx.Colour(200, 200, 250, 0))
#создаем и открываем диалог
openFontDialog = wx.FontDialog(self, m)
if openFontDialog.ShowModal() == wx.ID_OK:
        print m.GetInitialFont()
#получаем свойства выбранного шрифта
font_data = openFontDialog.GetFontData()
print font_data.GetColour(), "<- color"
print font_data.GetChosenFont().GetUnderlined(), "<- Underlined"
print font_data.GetChosenFont().GetStrikethrough(), "<- Strikethrough"
print font_data.GetChosenFont().GetFaceName(), "<- Name"
print font_data.GetChosenFont().GetPointSize(), "<- PointSize"
print font_data.GetChosenFont().GetNativeFontInfoDesc()
print font_data.GetChosenFont().GetNativeFontInfoUserDesc()
print font_data.GetChosenFont().GetStyle()
#закрываем диалог
openFontDialog.Destroy()

Web » Удаление полей с PK в SQLAlchemy » Июль 15, 2019 11:01:38

Добрый день, форумчане!
Работаю с алхимией, но в ней не особо шарю, поэтому и возникла следующая проблема:
У меня есть два проекта пирамиды, у каждого проекта своя БД, но она одинаковая для обеих проектов. В проекте 1 я изменияю некоторые поля в БД, и передаю все поля для изменений в другой проект POST запросом (чтобы не вычислять дельту и искать какие поля я заменяю. JSON может быть довольно таки большим). На проект 2, я делаю запрос по такой же записи (содержит 5 таблиц) из БД. И заменяю поля, на те который получил в запросе. Но т.к. я получаю в проекте 2 записи и поля PK. Поэтому измененные данные в запросе я не могу сделать flush в БД.
Подскажите, можно ли как-то удалять поля из запроса, чтобы алхимия думала что они не изменяются и я просто хочу обновить другие поля.
На сколько я понимаю даже после запроса алхимия даже неизменненые поля считает уже полем с изменением.
P.S.: Сделать запрос без PK не получается, получается на sql достаточно сложный запрос и похоже что база его не вывозит.

Тело запроса, который я делаю:
 current_test = session.query(Test) \
            .join(Test.testmu, isouter=True) \
            .join(Test.typetest, isouter=True) \
            .join(Test.termtest, isouter=True) \
            .join(Test.teststatus, isouter=True) \
            .join(Test.reasondisparity, isouter=True) \
            .join(Test.agreed_test, isouter=True) \
            .join(Intervalviolation, Testmu.idtestmu == Intervalviolation.idtestmu, isouter=True) \
            .join(Elementmu, Testmu.idtestmu == Elementmu.idtestmu, isouter=True) \
            .join(Elementmu.criterionmu, isouter=True) \
            .filter(Test.idtest == id_test).one()

Python для новичков » Обнаружение рамок объекта по массиву » Июль 12, 2019 06:06:28

Проблема в следующем:
У нас выводится изображение с камеры Basler и нам необходимо определить объект на изображение. Мы достигаем этого с помощью ограничивающих значений массива (картинка прикреплена ниже). Необходимо построить рамку вокруг определённого объекта, а для этого нужно узнать координаты границ объекта. OpenCv пробовали, он не работает с нашим изображением( не та кодировка).
Ниже представлен код:
from pypylon import pylon
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
img = pylon.PylonImage()
tlf = pylon.TlFactory.GetInstance()

cam = pylon.InstantCamera(tlf.CreateFirstDevice())
cam.Open()
numberOfImagesToGrab = 1
cam.StartGrabbing(numberOfImagesToGrab)
for i in range(numberOfImagesToGrab):
grabResult = cam.RetrieveResult(100, pylon.TimeoutHandling_ThrowException)
i1=i+1
img.AttachGrabResultBuffer(grabResult)
if grabResult.GrabSucceeded():
# Access the image data.
print(“SizeX: ”, grabResult.Width)
print(“SizeY: ”, grabResult.Height)
img1 = grabResult.Array
print(“Gray value of first pixel: ”, img1)
ipo = pylon.ImagePersistenceOptions()
quality = 100
ipo.SetQuality(quality)
B=img1<72
im = np.array(B, dtype=np.uint8)
fig,ax = plt.subplots(1)
# Display the image
ax.imshow(im)
# Create a Rectangle patch
rect = patches.Rectangle((1450,750),400,300,linewidth=1,edgecolor='r',facecolor='none')
# Add the patch to the Axes
ax.add_patch(rect)
plt.show()
img.Release()

Python для новичков » Одновременное выполнение функций » Июль 11, 2019 13:04:29

Всем привет. Есть такой код:
     def online(self, ):
        print('Бот активен')
        time.sleep(1)
        self.vk.messages.send(user_id=230729730, random_id=random.getrandbits(4), message='Бот активен')
        for event in self.longpoll.listen():
            if event.type == VkEventType.MESSAGE_NEW:
                request = event.text
                if '#' in request:
                    cmd = request.partition('#')
                    do = cmd[0]
                    if do == 'Рассылка' or do == "рассылка" or do == 'РАССЫЛКА':
                        if event.user_id == 230729730:
                            self.delivery(cmd)
                        else:
                            time.sleep(1)
                            self.vk.messages.send(user_id=event.user_id, random_id=random.getrandbits(4),
                                                  message='Отказано в доступе')
                self.subscribe(request=request, event=event)
Подскажите, пожалуйста, как сделать так, чтоб параллельно с ожиданием события в Longpoll выполнялась ещё одна функция? Хочу чтоб бот одновременно обрабатывал входящие сообщения и не зависимо от этого параллельно публиковал в сообществе посты по таймеру

Python для новичков » Знакомство с Python: взаимодействие Python и Open Server » Июль 8, 2019 20:45:48

Всем, привет! Народ, подскажите мне, пожалуйста… Как сделать так, чтобы Python работал С Open Server?

Python для новичков » Ошибка except sr.UnknownValueError: » Июль 8, 2019 17:05:53

Вот код:


import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime

opts = {
“alias”: ('Никита','Никич','Никитос','Никитосик'),
“tbr”: ('скажи','раскажи','обьясни'),
“cmds”: {
“ctime”: ('текущее время','текущий час','который час','сколько время','сколько времени'),
“radio”: ('включи музыку','включи музон','включи музончик','включи песни'),
“stupid1”: ('раскажи анекдот','раскажи прикол','рассмеши меня')
}
}
#функции
def speak(what):
print( what )
speak_engine.say( what )
speak_engine.runAndWait()
speak_engine.stop()

def callback(recognizer, audio):
try:
voice = recognizer.recognize_google(audio, language = “ru-RU”).lower()
print(" Распознано: " + voice)

if voice.startswith(opts):
# обращаемся к Никите
cmd = voice

for x in opts:
cmd = cmd.replace(x, “”).strip()

for x in opts:
cmd = cmd.replace(x, “”).strip()

# распознаём и выполняем команду
cmd = recognize_cmd(cmd)
execute_cmd(cmd)

except sr.UnknownValueError:
print(" голос не распознан!“)
except sr.RequestError as e:
print(” Неизвестная ошибка,проверьте интернет!")


def recognize_cmd(cmd):
RC = {'cmd': ‘', ’percent': 0}
for c, v in opts.items():

for x in v:
vrt = fuzz.ratio(cmd, x)
if vrt > RC:
RC = c
RC = vrt

return RC


def execute_cmd(cmd):
if cmd == ‘ctime’:
# сказать текущее время
now = datetime.datetime.now()
speak(“Сейчас ” + str(now.hour) + “:” + str(now.minute))
else:
print('комманда не распознана,повторите!')
# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index=1)

with m as source:
r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()
speak (“Добрый день,Никита слушает”)






ОШИБКА:

C:\python\python.exe CUsers/asus/PycharmProjects/test/test1.py
File “CUsers/asus/PycharmProjects/test/test1.py”, line 43
except sr.UnknownValueError:
^
SyntaxError: invalid syntax

Process finished with exit code 1

Python для новичков » Class-based Views Django - нюансы » Июль 7, 2019 23:30:42

Допустим у меня есть небольшой блог. Есть класс Post. У него функции get(для отображения шаблона) и post. Но мне нужна создать ещё функции по типу: редактировать пост, скрыть,восстановить, удалить. Как мне записать эти функции в этот класс и вызывать их? В urls.py писать что-то вроде Post.as_view().delete_post()? Или для каждой из этих функций создавать отдельный класс?
Допустим будет такой класс.
 class AddPost(View):
	model = Post
	template = template
	form = PostForm
	def get(self, request):
		form = self.model
		return render(request, self.template, context={'form':form})
	def post(self, request):
		bound_form = self.model(request.POST, request.FILES)
		if bound_form.is_valid():
			new_obj = bound_form.save()
			return redirect(new_obj)
		return render(request, self.template, context={'form':bound_form})

Центр помощи » Парсинг сайта myscore на python » Июль 7, 2019 17:37:23

Народ, помогите решить вопрос!
Как собрать информацию матчей с сайта myscore в разделе live, чтобы она ещё и обновлялась, а потом отправлялась в телеграм. Всё это на python, я уже много всего перепробовал, ничего не получается.

Заранее спасибо!
Очень нужна помощь!

Python для экспертов » wtfform поле FileField() получить progress bar и сохранить валидацию  » Июль 7, 2019 00:28:37

Добрый день.
Прошу помощи помочь разобраться в следующем вопрос.
Создаю форму:
 class PhotoAddForm(FlaskForm):
    photo = FileField('Фото', validators=[FileRequired(),
                                          FileAllowed(['jpg', 'jpe', 'jpeg', 'png', 'gif', 'svg', 'bmp'],
                                          'Invalid Image Type. Must be .jpg, .jpe, .jpeg, .png, .gif, .svg, .bmp')])

далее во вьюхе:

  
form = PhotoAddForm()
if request.method == 'POST' and form.validate_on_submit() and 'photo' in request.files:
    ....

как сделать прогесс бар?

если подключать JS, то как быть с валидацие полей?
например не выбран файл?

JS код:
 $(function(){
  var progressBar = $('#progressbar');
  $('#my_form').on('submit', function(e){
    e.preventDefault();
    var $that = $(this),
        formData = new FormData($that.get(0));
    $.ajax({
      url: $that.attr('action'),
      type: $that.attr('method'),
      contentType: false,
      processData: false,
      data: formData,
      dataType: 'json',
      xhr: function(){
        var xhr = $.ajaxSettings.xhr(); // получаем объект XMLHttpRequest
        xhr.upload.addEventListener('progress', function(evt){ // добавляем обработчик события progress (onprogress)
          if(evt.lengthComputable) { // если известно количество байт
            // высчитываем процент загруженного
            var percentComplete = Math.ceil(evt.loaded / evt.total * 100);
            // устанавливаем значение в атрибут value тега <progress>
            // и это же значение альтернативным текстом для браузеров, не поддерживающих <progress>
            // progressBar.val(percentComplete).text('Загружено ' + percentComplete + '%');
            progressBar.val(percentComplete).css("width", percentComplete + '%').text('Загружено ' + percentComplete + '%');
            console.log(percentComplete)
          }
        }, false);
        return xhr;
      },
      success: function(json){
        if(json.url){
          console.log(json.url);
          window.location.href = json.url;
        }
      }
    });
  });
});

Python проекты » Новая финансовая библиотека - yapo » Июль 6, 2019 09:14:40

Всем привет!
Мы создали библиотеку yapo для финансовых вычислений и анализа финансовых и экономических данных.

Сегодня библиотека умеет:
  • Работа с временными данными финансовых активов (Time Series с метаинформацией)
  • Вычисления накопленной доходности и среднегодовой доходности
  • Вычисления доходности скорректированной на размер инфляции (реальная доходность)
  • Вычисление риска активов (стандартное отклонение)
  • Составление инвестиционных портфелей (комбинация временных рядов для различных активов)
  • Вычисление индекса доходности российских депозитов TOP-10 (OKID10 – доступен через виджет)
Планы на будущее:
  • Оптимизация инвестиционных портфелей и построение границы эффективности
  • Расчет корреляции активов и индексов
  • Альтернативные варианты для расчета риска: VaR, CVaR, Полудисперсия
  • Вычисление ошибки следования для индексного фонда
  • Вычисление коэффициента бета
  • Применение метода Монте-Карло для финансовых временные рядов
  • Вычисление доходности к погашению и дюрации для облигаций
  • Вычисление Adjusted Close (учет сплитов, дивидендов и купонов в цене закрытия)
  • Учет пополнений/снятий денег для инвестиционных портфелей

Библиотека позволяет через API бесплатно работать с нашей базой финансовых и экономических данных. Собирали ее буквально “с мира по нитке”. Сегодня в базе есть:
  • Исторические данные для всех акций и ETF, доступных на следующих биржах: NYSE, NASDAQ, CBOE (США), MICEX (Россия)
  • Взаимные фонды США
  • Наиболее важные ценовые индексы и индексы полной доходности
  • Паевые инвестиционные фонды (ПИФ)
  • Курсы валют ЦБ (Рубль, Евро, Доллар США)
  • Инфляция (США, ЕС, Россия)
  • Ставки максимальной процентной ставки TOP-10 банков России
В ближайшее время дополним базу данными LSE и бумагами Шанхайской биржи, криптовалютами.

Библиотека на PyPi: https://pypi.org/project/yapo/
Репозитарий на GitHub: https://github.com/okama-io/yapo
Небольшой фронтэнд на Angular 2 (для демонстрации возможностей библиотеки): https://okama.io

Установка (Python 3.6+):
pip install yapo
Можно запустить библиотеку через MyBinder в Jupyter Notebooks: https://gke.mybinder.org/v2/gh/okama-io/yapo/master?filepath=examples
(есть примеры использования)

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

Python для новичков » Вопрос по API Google Drive (upload file) » Июль 2, 2019 12:48:02

Добрый день, уважаемые форумчане!
Опыт в python у меня небольшой, поэтому вопрос может оказаться «неумным». А скорее элементарным.
Вопрос по API Google Drive. Задача самая простая, но уже неделю бьюсь головой о стену с надписью Google. Необходимо просто отправить файл (картинку jpg) на Google Drive.
Даже код тупо взял с самого гугла (https://developers.google.com/drive/api/v3/quickstart/python). Начальная часть кода (авторизация и просмотр) работает. А вот отправка (upload) файла – нет. Она взята здесь: https://developers.google.com/drive/api/v3/manage-uploads
Код:
 #from __future__ import print_function
import pickle
#import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.http import MediaIoBaseDownload, MediaFileUpload
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/drive.metadata']
foldid = '1bF-ywYw28hyY3JCifcgX4Ldd3vpBa'
flnam = 'raspcool.jpg'
uplfl = '/home/pi/NetDrive/raspcool.jpg'
#    """Shows basic usage of the Drive v3 API.
#    Prints the names and ids of the first 10 files the user has access to.
#    """
creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            '/home/pi/NetDrive/credentials.json', SCOPES)
        creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
    with open('token.pickle', 'wb') as token:
        pickle.dump(creds, token)
service = build('drive', 'v3', credentials=creds)
    # Call the Drive v3 API
results = service.files().list(
    pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])
if not items:
    print('No files found.')
else:
    print('Files:')
    for item in items:
        print(u'{0} ({1})'.format(item['name'], item['id']))
# -- досюда работает ---- 
metadt = {'name': flnam}
#    'parents': [foldid]
media = MediaFileUpload(uplfl, mimetype='image/jpeg')
                        #resumable=True)
res = service.files().create(body=metadt, media_body=media, fields='id').execute()
Все что до print(u'{0} ({1})'.format(item, item)) – работает. Ошибка возникает непосредственно в строке res = service.files().create(body=metadt, media_body=media, fields='id').execute().
Ошибка: Traceback (most recent call last):
File “/home/pi/ProgsPi/APIGoogleRes.py”, line 67, in <module>
res = service.files().create(body=metadt, media_body=media, fields='id').execute()
File “/usr/local/lib/python3.5/dist-packages/googleapiclient/_helpers.py”, line 130, in positional_wrapper
return wrapped(*args, **kwargs)
File “/usr/local/lib/python3.5/dist-packages/googleapiclient/http.py”, line 851, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&alt=json&fields=id returned “Insufficient Permission: Request had insufficient authentication scopes.”>
Думал ошибка из-за того, что вначале (в оригинале на сайте) было
SCOPES =
убрал readonly, переделал token. Ошибка осталась.

Помогите пожалуйста! Что я упустил с точки зрения python? Просто еще остается возможность, что настройки API на Google account’е ограничивают права. Но это маловероятно.

Заранее благодарю, что откликнулись.
С уважением.