Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Центр помощи » Fonttools (library for manipulating fonts, written in Python) » Сен. 19, 2019 16:46:31

Скрипт добавляет записи к таблице шрифта ‘name’
Если записи отсутствуют все ок.
Если записи существуют размер шрифта сбрасывается на ноль.
Посмотрите пожалуйста на код. Может есть явный ‘косяк’ или подскажите как проверку таблицы сделать?

 from fontTools.misc.py23 import tounicode, unicode
from fontTools.ttLib import TTFont
from fontTools.ttLib.tables._n_a_m_e import NameRecord
import sys
if len(sys.argv) != 4:
	print("usage: AdRecTable.py fontfile.ttf 16 17 ")
	sys.exit(1)
fontfile = sys.argv[1]
font = TTFont(fontfile)
myRecord = NameRecord()
myRecord.nameID = 16
myRecord.platformID = 3
myRecord.platEncID = 1
myRecord.langID = 1033
myRecord.string = sys.argv[2]
font['name'].names.append(myRecord)
myRecord = NameRecord()
myRecord.nameID = 17
myRecord.platformID = 3
myRecord.platEncID = 1
myRecord.langID = 1033
myRecord.string = sys.argv[3]
font['name'].names.append(myRecord)
font.save(fontfile)

Python для новичков » Прошу о помощи. Помогите, пожалуйста. » Сен. 18, 2019 18:27:25

Здравствуйте. Прошу о помощи.

Сейчас ищу любую работу, но ничего не находится. Готов на любую подработку.
Одолжите, пожалуйста, на еду рублей 100-200. Сейчас в поисках работы, а дома есть абсолютно нечего. :-( От голода почти теряю сознание. Одолжить просто не у кого.

Если оставите контакты, то я клянусь вернуть с первой зарплаты (переведу на карту или номер телефона). В этом случае напишите в личные сообщения свой номер карты или номер телефона. Я верну 100%!

Мой номер карты: 5536 9137 5246 8484

Заранее большое человеческое спасибо.

Python для новичков » Коллеги, найдите пожалуйста ошибку » Сен. 14, 2019 12:52:58

Описание задачи:

За круглым столом сидят n людей из разных компаний. Люди пронумерованы от 1 до n по часовой стрелке. Человек с номером i относится к компании ai.

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

Люди сидят по кругу и пронумерованы так, что:

для всех людей, кроме человека с номером 1, соседом слева является человек, имеющий номер на единицу меньше, а для человека с номером 1 соседом слева является человек с номером n;
для всех людей, кроме человека с номером n, соседом справа является человек, имеющий номер на единицу больше, а для человека с номером n соседом справа является человек с номером 1.
Ваша задача — раздать микрофоны таким образом, чтобы минимизировать количество различных использованных цветов. Если Вы используете ровно k различных цветов, то цвета микрофонов должны быть пронумерованы от 1 до k.

Входные данные
Первая строка входных данных содержит одно целое число n (3 ≤ n ≤ 2·105) — количество людей на совещании.

Вторая строка входных данных содержит n целых чисел a1, a2, …, an (1 ≤ ai ≤ 2·105), где ai равно компании, к которой принадлежит человек с номером i.

Выходные данные
В первой строке выведите одно целое число k — минимально возможное количество различных цветов микрофонов.

Во второй строке входных данных выведите n целых чисел c1, c2, …, cn (1 ≤ ci ≤ k), разделенных пробелами и/или переводами строк, где ci обозначает номер цвета микрофона, который необходимо отдать i-му человеку. Если существует несколько возможных ответов, вы можете вывести любой из них. Стоит заметить, что минимально возможное количество цветов микрофонов различным быть не может.

Вот мой код. В чем может быть ошибка?
 n = int(input())
a = list(map(int, input().split()))
dct = {}
color = 1
for i in range(n):
    if a[i] not in dct:
        dct[a[i]] = color
        color += 1
result = []
for i in range(n):
    result.append(str(dct[a[i]]))
print(len(dct))
print(' '.join(result))

Python для новичков » экспорт графика plotly с помощью приложения на tkinter » Сен. 12, 2019 18:51:22

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

Я хочу, что бы при нажатии кнопки у меня открывалось диалоговое окно с выбором места куда сохранить файл и в этом месте сохранялся график в формате HTML


[import plotly.offline as py
def but1():
fig = go.Figure(data=data, layout=layout)
file = fd.asksaveasfile(mode='w', defaultextension=“.html”,
filetypes = ((“HTML file”, “*.html”), (“All Files”, “*.*”)))
if file:
file.write(py.plot(fig, filename='primer.html'))
file.close()


root = Tk()
but0 = Button(root, text=“(●'◡'●)”, command=but0, height=2, width=10)
but1 = Button(root, text=“¯\_(ツ)_/¯”, command=but1, height=2, width=10)
label = Label(root, text=“выбери файл”)
label.grid(row=1, column=1, sticky=W)
but0.grid(row=2, column=1, sticky=W)
but1.grid(row=2, column=2, sticky=W)
root.geometry(“150x120”)
root.mainloop()

Центр помощи » Проблема при вводе данных в компиляции Pycharm » Сен. 12, 2019 09:45:35

Добрый День прошу помощи начинающему ученику. Установил Pycharm но при компиляции программы выводит повтор того, что я ввожу

Python для новичков » selenium.webdriver and NTLM auth » Сен. 9, 2019 08:57:40

Всем добра….подскажите ранее кто нибудь подружил selenium.webdriver и NTLM аутентификацию?

Python для новичков » Добавить макрос VBA в книгу Excel » Сен. 5, 2019 15:21:26

Коллеги, может поможет кто?
Нужно в книгу Excel добавить макрос VBA, делаю так:
 import os, os.path
import win32com.client
file = 'excelfile.xlsm'
pathToMacro = 'Module.bas'
myMacroName = 'macros1'
if os.path.exists(file):
    with open (pathToMacro, "r") as myfile:
        macro=myfile.read()
    xl=win32com.client.DispatchEx("Excel.Application")
    wb = xl.Workbooks.Open(os.path.abspath(file), ReadOnly=1)
    xl.Visible = False
    xl.DisplayAlerts = False
    xlModule = wb.VBProject.VBComponents.Add(1)
    xlModule.CodeModule.AddFromString(macro)
    xl.Application.Run(myMacroName)
    xl.SendKeys("{Enter}", Wait=1)
    wb.Close(False)
    xl.Quit()
    del wb
    del xl
Все работает если проект VBA не защищен, а вот если стоит защита, то облом.
Можно как-то снять защиту с проекта VBA? Пароль известен.
Спасибо!

Флейм » Ищем программиста » Сен. 3, 2019 06:02:08

Ищу начинающего программиста в команду, тема в сфере web, маркетинг, PR. Ограничений по возрасту нет, Знания на уровне самостоятельной разработки, либо способность быстро самообучаться. Стек знаний: docker-html-css-sass-js, основа python-django-mysql(postgre). Обращаться в Telegram: @coder_ex

Обсуждение новостей » Новый искусственный интеллект TabNine допишет код за программиста. И исправит все ошибки! » Сен. 1, 2019 11:54:45

Группа инженеров разработала искусственный интеллект TabNine, поддерживающий 22 самых популярных на сегодняшний день языка программирования. Он может быть интегрирован в большинство редакторов кода и дописывать код за программиста, пишет The Next Web.

Создатель алгоритма Джейкоб Джексон разработал TabNine на базе системы обработки естественного языка GPT-2 от OpenA. Для обучения искусственного интеллекта он использовал более 2 млн файлов из GitHub.

Во время работы TabNine анализирует уже написанный код и предлагает следующий элемент строки на основе предыдущих. Сейчас он поддерживает 22 самых популярных языка, в том числе Python, JavaScript, Java, C ++, C, PHP, Go, C #, Ruby, Objective-C, Rust и Swift.
источник
git
install
зы у меня в pycharm не завелось

Python для новичков » Как лучше реализовать проверку последних новостей парсеру? » Авг. 23, 2019 14:48:57

У меня есть парсер который парсит 10 ресурсов. Он работает от БД. То есть берет правила выдергивания контента из таблицы. После чтобы мне спарсить ссылку на новость, заголовок, дату, контент. Я создал для ссылок на новости, заголовков, дат, контента отдельные функции. И вот после полученные ссылки на новости, заголовки, даты, контент. Заносятся в уже в другую таблицу для новостей. Как мне сделать проверку новостей. То есть чтобы парсер не парсил повторяющиеся новости,и не заносил их в БД.

Есть для меня 2 оптимальных метода.
Метод1:Перед записью в БД проверить есть-ли такая
запись, если есть - прерывать цикл парсинга, ставлю
задержку, допустим 5 минут и после начинаю сначала.
Метод2:Использовать SELECT по ссылке на новость, если
такая уже есть переходить к след элементу через continue
массива.

Какой метод лучше реализовать ? Можно примером пожалуйста

Python для новичков » tkinter, PhotoImage() как фон для Listbox » Авг. 22, 2019 17:15:20

 from tkinter import Tk, Listbox, PhotoImage
x = Tk()
b = PhotoImage(file="test.gif")
c = Listbox(x, width=100, height=20, image=b)
c.pack()
x.mainloop()
Но это не работает как у других виджетов. Как можноэто сделать?

Центр помощи » Вывести несколько графиков » Авг. 16, 2019 14:20:32

Помогите, пожалуйста.

У меня есть код, который выводит графики, но выводит он их поочередно- когда закрывается предыдущее окно.
Как сделать так, чтобы на экране вывелись все эти графики сразу?

import numpy as np
import scipy.stats as stats
import pylab as pl

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение АКБ МВК в феврале')
pl.xlabel(u' АКБ, %')
pl.grid()
pl.show()

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение АКБ МВК в марте')
pl.xlabel(u' АКБ, %')
pl.show()

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение АКБ МВК в апреле')
pl.xlabel(u' АКБ, %')
pl.show()

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение АКБ МВК в мае')
pl.xlabel(u' АКБ, %')
pl.show()

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение АКБ МВК в июне')
pl.xlabel(u' АКБ, %')
pl.show()

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение АКБ МВК в июле')
pl.xlabel(u' АКБ, %')
pl.show()

h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.title ('Распределение человека')
pl.show()

Центр помощи » Чтение из документа Эксель » Авг. 16, 2019 11:03:56

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

Это код для рисования графика, хочу, чтоб этот график рисовался на основе данных экселевского дока.

Спасибо!

import numpy as np
import scipy.stats as stats
import pylab as pl
h = sorted()
fit = stats.norm.pdf(h, np.mean(h), np.std(h))
pl.plot(h,fit,'-o')
pl.hist(h,normed=True)
pl.show()

Python для новичков » Selenium не загружает нужную страницу » Авг. 15, 2019 10:29:37

Сам код:
 from selenium import webdriver
from selenium.webdriver.firefox.options import Options
userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
proxy = '89.238.190.164'
port = 3128
options = Options()
options.add_argument("-profile")
options.add_argument(r"E:\\browser\\mozila\\007\\Data\\profile")
proxy_profile = webdriver.FirefoxProfile()
proxy_profile.set_preference("general.useragent.override", userAgent)
proxy_profile.set_preference("network.proxy.type", 1)
proxy_profile.set_preference("network.proxy.http", proxy)
proxy_profile.set_preference("network.proxy.http_port", port)
proxy_profile.set_preference("network.proxy.ssl", proxy)
proxy_profile.set_preference("network.proxy.ssl_port", port)
proxy_profile.set_preference("network.proxy.https", proxy)
proxy_profile.set_preference("network.proxy.https_port", port)
driver = webdriver.Firefox(options=options, firefox_profile=proxy_profile)
driver.get('https://google.com')

В итоге загружается профиль, и открывается страничка по умолчанию Яндекс. И дальше все. Гугл не открывается. Почему так, хз. Вроде все облазил. Помогите. Хочу заставить selenium дальше работать, что бы открывал странички, и совершал поиск… Но почему, он стопорится на открытии домашней странице?

Хоть бы ошибку выдавал и тогда понятно было куда копать, а так реально без понятия.

Если сделать простой скрипт:
 from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://google.com')

То бес проблем открывает страничку гугл. Значит вебдрайвер впорядке и совместим с браузером.

Понял что проблема возникает из за загрузки профиля. Удалил из кода - заработал… Но мне все равно нужно каким-то способом загружать профиль. В инете ничего путного не нашел

Центр помощи » Не могу решить 28 задачу  » Авг. 13, 2019 06:57:44

http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html
 n = 0
	if cell_is_filled():
		while not wall_is_on_the_right():
			n += 1
			for i in range(n):
				move_right()
	else:
		while not wall_is_on_the_right():
			move_right()

Python для новичков » Flask WTF передача переменных (валидаторы форм) » Авг. 8, 2019 14:00:03

Здравствуйте.
Ситуация следующая, имеется одна страничка на которой располагается сгенерированная WTForm
Класс формы
 class Users_cl(FlaskForm):
    name = StringField('name', [validators.DataRequired(), validators.Length(min=1, max=13, message='Имя не более 13 символов')])
    codename = StringField('codename', validators = [DataRequired()])

На главную страничку помещаю эту форму и делаю просмотр
 @app.route("/", methods=['GET','POST'])
@app.route("/index", methods=['GET','POST'])
def index():
    form = User_cl()
    return render_template('index.html', form=form)

На HTML передаются параметры и форма рисуется, все нормально.
Но на форме так же есть кнопка для добавления в базу.
Вот обработка кнопки
 @app.route("/add_user", methods=['POST'])
def add_user():
        form = User_cl(request.form)
        if form.validate_on_submit():    
           user_to_db = User_db_cl(
                                 name=form.name.data,
                                 codename=form.codename.data)
            db.session.add(user_to_db)
            db.session.commit()
            return redirect(url_for('index'))
        else:
            return redirect(url_for('index',form=form)) #тут кроется основная проблема

Данные в базу попадают, все работает.
Проблема начинается когда мне из /add_user нужно передать информацию на /index, а точнее форму т.к. мне нужно прочитать form.errors для полей и обработать их.

Тут такое наблюдение если делать через:
 return render_template('index.html', form=form)
То тогда если будет больше информации (кроме form) передаваться на главную страницу то мне нужно будет в блоке /add_user все это прописывать (и в итоге у меня и в index и в add_user одинаковые блоки).

Поэтому думал передавать через redirect и url_for:
 return redirect(url_for('index',form=form))
Получается основную логику входа на главную index я пропишу в блоке index. Но вот передать нормально form я в этот блок через redirect не могу. Есть информация что redirect не умеет делать POST (только GET, хотя есть информация о том что можно прописать code=307 в параметрах).

Как быть в этой ситуации? как обычно делают при передаче параметров в рамках одной страницы.
Спасибо за полезную информацию.

Django » Serializer » Авг. 6, 2019 18:19:29

Есть такие модели

 class Dictionary(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    parentId = models.UUIDField(editable=True, null=True)
    name = models.CharField(max_length=100)
    date_create = models.DateTimeField(auto_now=True)
    date_end = models.DateTimeField(auto_now=False, null=True)
class Teacher(models.Model):
    name = models.CharField(max_length=100)
    message = models.CharField(max_length=300)
    status = models.OneToOneField(Dictionary, on_delete=models.CASCADE)
Есть такой urls

 from django.urls import path
from . import views
urlpatterns = [
    path('get', views.GetViewSet.as_view({'get': 'list'})),
    ]
Есть такой ViewSet

 class GetViewSet(viewsets.ModelViewSet):
    MyApiObj = null
    @property
    def api_object(self):
        return namedtuple("ApiObject", self.request.data.keys())(*self.request.data.values())
    def get_serializer_class(self):
        GeneralSerializer.Meta.model = apps.get_model(app_label=self.MyApiObj.app,  model_name=self.MyApiObj.object)
        return GeneralSerializer
    def post(self, request):
        self.MyApiObj = self.api_object
        return self.select_api()
    def select_api(self):
        queryset = QueryHelper.select(self.MyApiObj)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
Serializer такой

 class GeneralSerializer(serializers.ModelSerializer):
    class Meta:
        model = None
        fields = '__all__'

Пост метод передаю такие параметры

 {  
   "app":"leads",
   "object":"Teacher",
   "settings":{ 
   },
   "data":{  
   }
}
ответ вот это

 [
    {
        "id": 1,
        "name": "John",
        "message": "Hi everyone",
        "status": "e3b86ed4-8794-413b-994c-b1ec0a43eebe"
    }
]
Проблема в том что мне нужно дочерний класс Dictionary(status) в Teacher вытащить не id(uuid) а сам обьект не создовая отдельный сериалайзер для dictionary.

пробовал такое и оно работает

 class DictionarySerializer(serializers.ModelSerializer):
    class Meta:
        model = Dictionary
        fields = '__all__'
class GeneralSerializer(serializers.ModelSerializer):
    status = DictionarySerializer(required=True)
    class Meta:
        model = None
        fields = '__all__'

Но оно не подойдет потому что 1 Не создовать другой сериализатор 2 Не только для модели dictionary а оно должно быть универсальный для всех модели с дочерними обьектами

Помогите пожалуйста)

Python для новичков » Как можно ускорить работу (качество) программы » Авг. 3, 2019 19:14:35

Всем привет. Решил я для личных целей написать SMS Bomber, программу я написал, сервисов нашел кучу кучную, но в итоге проблема одна и та же - качество работы. Давайте я лучше сначала покажу код моих запросов (про import requests я не забыл):
 a=requests.post('https://api.sunlight.net/v3/customers/authorization/',data = {"phone":myphonenumber[1:]},headers = {'Accept-Language':'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Connection':'keep-alive', 'Host':'api.sunlight.net', 'origin':'https://sunlight.net','Referer':'https://sunlight.net/profile/login/?next=/profile/'})
print("SMS было успешно отправлено", a)

На основании этого я создал программы 3-х типов:

1.
 import requests
i=0
while i<1:
    запрос
    
    запрос
    
    запрос

2.
 import requests
from threading import Thread
def spam_1():
    i=0
    while i<1:
    запрос
    
def spam_2():
    i=0
    while i<1:
    
    запрос
    
def spam_3():
    i=0
    while i<1:
    
    запрос
    
th_1, th_2, th_3 = Thread(target=spam_1), Thread(target = spam_2), Thread(target = spam_3)
if __name__ == '__main__':
    th_1.start(), th_2.start(), th_3.start()
    th_1.join(), th_2.join(), th_3.join()

3.
 import subprocess
subprocess.Popen("1.exe")
subprocess.Popen("2.exe")
subprocess.Popen("3.exe")
subprocess.Popen("4.exe")
subprocess.Popen("5.exe")
subprocess.Popen("6.exe")
subprocess.Popen("7.exe")
subprocess.Popen("8.exe")
subprocess.Popen("9.exe")
subprocess.Popen("10.exe")
subprocess.Popen("11.exe")
subprocess.Popen("12.exe")
subprocess.Popen("13.exe")
subprocess.Popen("14.exe")
subprocess.Popen("15.exe")
subprocess.Popen("16.exe")
subprocess.Popen("17.exe")
subprocess.Popen("18.exe")
subprocess.Popen("19.exe")
subprocess.Popen("20.exe")
subprocess.Popen("21.exe")
subprocess.Popen("22.exe")
subprocess.Popen("23.exe")

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

При запуске любой из программ з-х типов была одна проблема. Запросы шли очень коряво, то есть с пропусками, очень часто мог идти запрос на один сервис подряд до 200 раз, в то время как SMS с других сервисов вообще не поступали. Я ожидал от программы одновременных и очень быстрых запросов на сайт, но в итоге программа спустя 10 минут почти вообще прекращала спамить. SMS идут совсем не так, как идут запросы. И это связано далеко не с кулдауном и блокировками. У меня есть сервисов 10 без кулдауна и блокировок, но после 10 SMS от одного сервиса он затухает и больше не спамит. Когда я тестирую сервис отдельно, то он может прислать до 300 смс в несколько минут. В общей программе такого нету далеко. Подскажите, как можно это фиксануть, или хоть что-то сделать…