Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

GUI » wx.lib.masked » Фев. 19, 2017 13:30:58

Добрый день!
Возникла проблема с masked.TextCtrl. Буду признателен за несколько примеров с кириллицей (простые вещи работают нормально) ну или пинок а нужную сторону. Спасибо.

Django » Django psql datetime filter month » Фев. 17, 2017 11:45:13

Добрый день.
Проблема при фильтрации DateTimeField по Месяцу
Model.objects.filter(created__month=1)
Ошибка ‘utf8’ codec can't decode byte 0xe7 in position 487: invalid continuation byte

Смотрим sql -
 WHERE EXTRACT(\'month\' FROM "test"."created" AT TIME ZONE \'RTZ 2 (\xe7\xe8\xec\xe0) \') = 2 LIMIT 21'
Не нравится 'RTZ 2 (\xe7\xe8\xec\xe0) \' что означает RTZ 2 (зима)

Что посоветуете?

Python для новичков » Как сохранить картинку из xls  » Фев. 16, 2017 15:35:07

Всем привет!
Столкнулся с проблемой: не могу решить задачу по сохранению картинки из xls файла.
Пример файла в прикреплении.
Пробовал то, что описано в статье, но не помогает. Постоянно какие-то ошибки.
http://stackoverflow.com/questions/37180097/copy-image-from-excel-and-save-it-using-python

Пробовал и на Питоне 3.5 и на 2.7
Может кто сталкивался с подобной задачей, подскажите.
Спасибо.

Python для новичков » Змейка Tkinter » Фев. 14, 2017 23:48:02

Всем добрый вечер!
Решил написать змейку на Python-е с использованием стандартной библиотеки Tkinter. Знаю, что вообще игры пишутся с использованием PyGame… Но первоначальная задача для меня - освоить Tkinter.

Написал такой код. Очень громоздко, хотя почти ничего не делается. Подскажите пожалуйста как мне можно его улучшить(сократить) + выслушаю идеи как удлинять змейку при съедании еды.

 from tkinter import *
from random import randrange
segment_list = []
segment_list.append(1)
root = Tk()
root.geometry("800x600")
X_START = 40    # Начальная позиция змейки по X
Y_START = 40    # Начальная позиция змейки по Y
X_OFFSET = 40   # Смещение по X
Y_OFFSET = 40   # Смещение по Y
SPEED_SNAKE = 300   # Скорость с которой перерисовывается змейка (в after)
canv = Canvas(root, bg="White")
canv.pack(fill=BOTH, expand=1)
# Задаем объект кнопка
button_down = Button(root, text="Вниз", width=10, height=2)
button_right = Button(root, text="Вправо", width=10, height=2)
button_left = Button(root, text="Влево", width=10, height=2)
button_up = Button(root, text="Вверх", width=10, height=2)
# Размещаем кнопки
button_down.place(x=400, y=500)
button_right.place(x=470, y=470)
button_left.place(x=330, y=470)
button_up.place(x=400, y=440)
def draw_foot():
    """ Рисуем рандомно шарик еды для змейки """
    global oval, x_food, y_food
    canv.delete(oval)
    x_food = randrange(50, 600)
    y_food = randrange(50, 600)
    rad = 10
    oval = canv.create_oval(x_food - rad, y_food - rad, x_food + rad, y_food + rad, fill="Black", width=0)
    root.after(10000, draw_foot)
########################################################################################################################
# Обработка кнопок
def down(event):
    """ Обработчик кнопки "Вниз" """
    global id
    root.after_cancel(id)
    movement_snake_down()
def movement_snake_down():
    """ Функция отвечает за анимацию змейки после нажатия кнопки "Вниз" """
    global segment, id
    global X_START, Y_START, X_OFFSET, Y_OFFSET
    global x_food, y_food
    canv.delete(segment)
    segment = canv.create_rectangle(X_START, Y_START + Y_OFFSET, X_START + X_OFFSET, Y_START + Y_OFFSET + 40, fill="Black")
    Y_START += Y_OFFSET
    id = root.after(SPEED_SNAKE, movement_snake_down)
def right(event):
    """ Обработчик кнопки "Вправо" """
    global id
    root.after_cancel(id)
    movement_snake_right()
def movement_snake_right():
    """ Функция отвечает за анимацию змейки после нажатия кнопки "Вправо" """
    global segment, id
    global X_START, Y_START, X_OFFSET, Y_OFFSET
    canv.delete(segment)
    segment = canv.create_rectangle(X_START + X_OFFSET, Y_START, X_START + X_OFFSET + 40, Y_START + Y_OFFSET, fill="Black")
    X_START += X_OFFSET
    id = root.after(SPEED_SNAKE, movement_snake_right)
def left(event):
    """ Обработчик кнопки "Влево" """
    global id
    root.after_cancel(id)
    movement_snake_left()
def movement_snake_left():
    """ Функция отвечает за анимацию змейки после нажатия кнопки "Влево" """
    global segment, id
    global X_START, Y_START, X_OFFSET, Y_OFFSET
    canv.delete(segment)
    segment = canv.create_rectangle(X_START - X_OFFSET, Y_START, X_START - X_OFFSET + 40, Y_START + Y_OFFSET, fill="Black")
    X_START -= X_OFFSET
    id = root.after(SPEED_SNAKE, movement_snake_left)
def up(event):
    """ Обработчик кнопки "Вверх" """
    global id
    root.after_cancel(id)
    movement_snake_up()
def movement_snake_up():
    """ Функция отвечает за анимацию змейки после нажатия кнопки "Вверх" """
    global segment, id
    global X_START, Y_START, X_OFFSET, Y_OFFSET
    canv.delete(segment)
    segment = canv.create_rectangle(X_START, Y_START - Y_OFFSET, X_START + X_OFFSET, Y_START - Y_OFFSET + 40, fill="Black")
    Y_START -= Y_OFFSET
    id = root.after(SPEED_SNAKE, movement_snake_up)
########################################################################################################################
segment = canv.create_rectangle(10, 50, 50, 90, fill="Black")
oval = canv.create_oval(50, 50, 70, 70, fill="Black", width=0)
def main():
    """ Главная функция """
    # Сначала змейка движется вправо
    movement_snake_right()
    # Анимация еды
    draw_foot()
    # Обработка нажатий на кнопки
    button_down.bind("<Button-1>", down)
    button_right.bind("<Button-1>", right)
    button_left.bind("<Button-1>", left)
    button_up.bind("<Button-1>", up)
    mainloop()
main()

Центр помощи » Сделать изображение размытым - Python » Фев. 12, 2017 18:36:13

Задание:
1) Сделать изображение размытым, кроме области внутри круга заданного радиуса, граница круга должна быть плавной
2) То же самое, но круг должен двигаться вместе с курсором мыши.

Решение: получилось только просто размыть изображение

import cv2 as cv
image=cv.imread(“2.jpg”)
cv.imshow(“2.jpg”, image)
image = cv.GaussianBlur(image, (7,7), 10) # Добавляем размытие
cv.imshow(“image”, image) # Отображаем результат
cv.waitKey(0)


Желательно реализовать конечно 2 задание, но если бы подсказали хотя бы с 1 было бы уже не плохо.

Django » Изменить сообщение об ошибке PasswordValidator » Фев. 12, 2017 12:16:01

Добрый день, форумчане. Проблема следующая, используется стандартная форма django UserCreationForm. Хочу изменить текст сообщения об ошибке, возвращаемого валидаторами пароля (к примеру такого как “This password is entirely numeric”). Можно ли это сделать без создания собственных валидаторов и прочих костылей?

GUI » PyQt5 | Создание фреймов » Фев. 9, 2017 17:17:24

Всем привет! У меня есть код, в котором создаётся главное окно, его иконка, задано размещение по центру экрана. Мне нужно создать фрейм, в котором будет тест , а также потом как-то перейти на этот фрейм и обратно на главное окно после завершения теста. Буду рад за любого рода помощь. Код прилагается

 import sys
from PyQt5 import QtGui, QtWidgets, QtCore
class BoxLayout(QtWidgets.QWidget):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
 
        self.setWindowTitle('box layout')
 
        previous = QtWidgets.QPushButton("Previous")
        next = QtWidgets.QPushButton("Next")
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(previous)
        hbox.addWidget(next)
 
        vbox = QtWidgets.QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
 
        self.setLayout(vbox)
 
        self.resize(640, 480)
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
 
        self.central_widget = BoxLayout(self)
        self.resize(640, 480)  # задаём размер окна
        self.center()
        self.setWindowTitle('Тест-опросник')  # задаём название окна
        self.setWindowIcon(QtGui.QIcon('mobile-phone.png'))  # задаём иконку окна
        self.setCentralWidget(self.central_widget)
 
    def center(self):  # размещение окна приложения в центре экрана
        screen = QtWidgets.QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)
 
    def closeEvent(self, event):
        reply = QtWidgets.QMessageBox.question(self, 'Предупреждение',
                                           "Вы действительно хотите выйти?",
                                               QtWidgets.QMessageBox.Yes,
                                               QtWidgets.QMessageBox.No)
 
        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
 
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

Центр помощи » Помогите запустить скрип на питоне. » Фев. 8, 2017 14:46:59

Добрый день!
Кто-нибудь может запустить скрипт на питоне для снятия в удобном виде данные с сайта Реформа ЖКХ (http://www.reformagkh.ru) по многоквартирным жилым домам? и если не трудно прислать результат - csv файл. По id=2281126,

Пример запроса:
python get_reformagkh_data-v3.py 2281126 data/housedata.csv -of html

Скрипт не мой, взято тут https://github.com/nextgis/reformagkh

 #!/usr/bin/env python -u
# -*- coding: utf-8 -*-
#******************************************************************************
#
# get_reformagkh_data-v2.py
# ---------------------------------------------------------
# Grab reformagkh.ru data on buildings, put it in the CSV table.
# More: https://github.com/nextgis/reformagkh
#
# Usage: 
#      usage: get_reformagkh_data-v2.py [-h] [-o ORIGINALS_FOLDER] id output_name
#      where:
#           -h           show this help message and exit
#           id           Region ID
#           -o,overwrite Overwite all, will write over previously downloaded files
#           output_name  Where to store the results (path to CSV file)
#           -of ORIGINALS_FOLDER  Folder to save original html files. Skip saving if empty.
# Examples:
#      python get_reformagkh_data-v2.py 2280999 data/housedata2.csv -o html_orig
#
# Copyright (C) 2014-2016 Maxim Dubinin (sim@gis-lab.info)
# Created: 18.03.2014
#
# This source is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This code is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# A copy of the GNU General Public License is available on the World Wide Web
# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
# MA 02111-1307, USA.
#
#******************************************************************************
from bs4 import BeautifulSoup
import urllib2
import csv
from progressbar import *
import socket
import argparse
from collections import namedtuple
from time import sleep
import requesocks
from stem import Signal
from stem.control import Controller
parser = argparse.ArgumentParser()
parser.add_argument('id', help='Region ID')
parser.add_argument('output_name', help='Where to store the results (path to CSV file)')
parser.add_argument('-o','--overwrite', action="store_true", help='Overwite all, will write over previously downloaded files.')
parser.add_argument('-of','--originals_folder', help='Folder to save original html files. Skip saving if empty.')
args = parser.parse_args()
if args.originals_folder:
    if not args.originals_folder.endswith('\\'): args.originals_folder = args.originals_folder + '\\'
    if not os.path.exists(args.originals_folder): os.mkdir(args.originals_folder)
    
def console_out(text):
    #write httplib error messages to console
    time_current = datetime.datetime.now()
    timestamp = time_current.strftime('%Y-%m-%d %H:%M:%S')
    
    f_errors.write(timestamp + ': '+ text)
def get_content(link):
    numtries = 5
    timeoutvalue = 40
    
    for i in range(1,numtries+1):
        try:
            res = session.get(link).text
        except:
            time.sleep(3)
            res = ''
        else:
            break
    
    if res == '':
        print('Session time out')
        sys.exit() 
        
    return res
    
def urlopen_house(link,id):
    #fetch html data on a house
    
    res = get_content(link)
    soup = BeautifulSoup(''.join(res), 'html.parser')
    captcha = check_captcha(soup)
    
    while captcha == True:
        res = get_content(link)
        soup = BeautifulSoup(''.join(res), 'html.parser')
        captcha = check_captcha(soup)
        change_proxy()
    
    if args.originals_folder:
        f = open(args.originals_folder + id + ".html","wb")
        f.write(res.encode('utf-8'))
        f.close()
    return res
def change_proxy():
    with Controller.from_port(port = 9151) as controller:
            controller.authenticate(password="password")
            controller.signal(Signal.NEWNYM)
    
def extract_value(tr):
    #extract value for general attributes
    res = tr.findAll('td')[1].text.strip()
      
    return res
def extract_subvalue(tr,num):
    #extract value for general attributes
    res = tr.findAll('tr')[num].text.strip()
      
    return res
def check_size(link):
    res = get_content(link)
    soup = BeautifulSoup(''.join(res), 'html.parser')
    captcha = check_captcha(soup)
    
    while captcha == True:
        res = get_content(link)
        soup = BeautifulSoup(''.join(res), 'html.parser')
        captcha = check_captcha(soup)
        change_proxy()
    
    divs = soup.findAll('div', { 'class' : 'clearfix' })
    table = divs[1].find('table', { 'class' : 'col_list' })
    size = table.findAll('td')[3].text.replace(u' ед.','').replace(' ','')
    return size
def get_house_list(link):
    size = check_size(link)
    if size == 0: size = check_size(link)
    
    pages = (int(size) / 10000) + 1
    
    houses_ids = []
    for page in range(1,pages+1):
        res = get_content(link + '&page=' + str(page) + '&limit=10000')
        soup = BeautifulSoup(''.join(res), 'html.parser')
        captcha = check_captcha(soup)
    
        while captcha == True:
            res = get_content(link + '&page=' + str(page) + '&limit=10000')
            soup = BeautifulSoup(''.join(res), 'html.parser')
            captcha = check_captcha(soup)
            change_proxy()
        tds = soup.findAll('td')
        for td in tds:
            if td.find('a') is not None:
                if td.find('a').has_attr('href') and 'myhouse' in td.find('a')['href']:
                    house_id = td.find('a')['href'].split('/')[4]
                    houses_ids.append(house_id)
    
    return houses_ids
def get_data_links(id):
    f_atd = open('atd.csv','rb')
    csvreader = csv.reader(f_atd, delimiter=',')
    regs = []
    for row in csvreader:
        if id in row:
            r = region(row[0],row[1],row[2],row[3],row[4],row[5])
            regs.append(r)
            
    return regs
def check_captcha(soup):
    captcha = soup.find('form', { 'name' : 'request_limiter_captcha'})    
    if captcha != None or u'Каптча' in soup.text or 'captcha' in str(soup): 
        return True
    else:
        return False
    
def get_housedata(link,house_id,lvl1_name,lvl1_id,lvl2_name,lvl2_id):
    #process house data to get main attributes
    
    if args.originals_folder:
        if not os.path.isfile(args.originals_folder + '/' + house_id + ".html"):
            try:
                res = urlopen_house(link + 'view/' + house_id,house_id)
            except:
                f_errors.write(link + 'view/' + house_id + '\n')
                res = False
        else:
            res = open(args.originals_folder + '/' + house_id + ".html",'rb').read()
    else:
       try:
           res = urlopen_house(link + 'view/' + house_id,house_id)
       except:
           f_errors.write(link + 'view/' + house_id + '\n')
           res = False
    
    if res != False:
        soup = BeautifulSoup(''.join(res),'html.parser')
        f_ids.write(link + 'view/' + house_id + ',' + house_id + '\n')
        
        if len(soup) > 0 and 'Time-out' not in soup.text and '502 Bad Gateway' not in soup.text: #u'Ошибка' not in soup.text
            addr = soup.find('span', { 'class' : 'float-left loc_name_ohl width650 word-wrap-break-word' })
            address = addr.contents[0].strip()
            if len(addr.contents) > 2:
                fias = 0
            else:
                fias = 1
            
            #GENERAL
            div = soup.find('div', { 'class' : 'fr' })
            tables = div.findAll('table')
            table0 = tables[0]
            trs = table0.findAll('tr')
            mgmt_company = trs[0].findAll('td')[1].text.strip()                  #gen8 Домом управляет
            if trs[0].findAll('td')[1].find('a'):
                mgmt_company_link = 'http://www.reformagkh.ru' + trs[0].findAll('td')[1].find('a')['href']
                mgmt_company_link = mgmt_company_link.split('?')[0]
            else:
                mgmt_company_link = ''
            table1 = tables[1]
            trs = table1.findAll('tr')
            status = '' #trs[1].findAll('td')[1].text.strip()                    #gen7 Состояние дома (куда-то исчезло в последней версии)
            table1 = tables[1]
            trs = table1.findAll('tr')
            #area = float(trs[2].findAll('td')[1].text.strip().replace(' ',''))  #gen1 Общая площадь
            #year = trs[6].findAll('td')[1].text.strip()                          #gen6 Год ввода в экспл
            lastupdate = trs[8].findAll('td')[1].text.strip()                    #gen2 Последнее изменение анкеты
            lastupdate = ' '.join(lastupdate.replace('\n','').split())
            servicedate_start = trs[10].findAll('td')[1].text.strip()            #gen3 Дата начала обслуживания дома
            servicedate_end = '' #trs[5].findAll('td')[1].text.strip()           #gen4 Плановая дата прекращения обслуживания дома
            #TODO extract lat/long coords from script
            if 'center' in soup.findAll('script')[11]:
                lat,lon = soup.findAll('script')[11].text.split('\n')[3].split('[')[1].split(']')[0].split(',')
            else:
                lat,lon = soup.findAll('script')[12].text.split('\n')[3].split('[')[1].split(']')[0].split(',')
            #PASSPORT
            ##GENERAL
            divs = soup.findAll('div', { 'class' : 'numbered' })
            div0 = divs[0]
            trs = div0.findAll('tr')
            lentrs = len(trs)
            if lentrs > 58: 
                trs_offset = lentrs - 58
            else:
                trs_offset = 0
            
            year = extract_value(trs[3])                            #5 Год ввода в эксплуатацию
            serie = extract_value(trs[5])                            #1 Серия
            house_type = extract_value(trs[7])                       #4 Тип жилого дома
            capfond = extract_value(trs[9])                          #5 Способ формирования фонда капитального ремонта
            avar = extract_value(trs[11])                            #6 Дом признан аварийным
            levels_max = extract_subvalue(trs[12], 1)                #7 Этажность: макс
            levels_min = extract_subvalue(trs[12], 3)                #7 Этажность: мин
            doors = extract_value(trs[18])                           #9 Количество подъездов
            room_count = extract_value(trs[23])                      #10 Количество помещений
            room_count_live = extract_value(trs[26])                 #10 Количество помещений: жилых
            room_count_nonlive = extract_value(trs[28])              #10 Количество помещений: нежилых
            area = extract_value(trs[31]).replace(' ','')            #11 Общая площадь дома
            area_live = extract_value(trs[34]).replace(' ','')       #11 Общая площадь дома, жилых
            area_nonlive = extract_value(trs[36]).replace(' ','')    #11 Общая площадь дома, нежилых
            area_gen = extract_value(trs[38]).replace(' ','')        #11 Общая площадь помещений, входящих в состав общего имущества
            area_land = extract_value(trs[41]).replace(' ','')       #12 Общие сведения о земельном участке, на котором расположен многоквартирный дом
            area_park = extract_value(trs[43]).replace(' ','')       #12 Общие сведения о земельном участке, на котором расположен многоквартирный дом
            cadno = trs[44].findAll('td')[1].text                    #12 кад номер
            
            energy_class = extract_value(trs[48 + trs_offset])       #13 Класс энергоэффективности
            blag_playground = extract_value(trs[51 + trs_offset])    #14 Элементы благоустройства
            blag_sport = extract_value(trs[53 + trs_offset])         #14 Элементы благоустройства
            blag_other = extract_value(trs[55 + trs_offset])         #14 Элементы благоустройства
            other = extract_value(trs[57 + trs_offset])              #14 Элементы благоустройства
            ##meter devices
            result = {}
            table = soup.findAll('table', {'class': 'overhaul-services-table'})[-1]
            for section in table.findAll('tbody'):
                rows = section.findAll('tr')
                cells = rows[0].findAll('td')
                search = (
                    (u'Холодное водоснабжение', u'COLD_WATER'),
                    (u'Горячее водоснабжение', u'HOT_WATER'))
                for q in search:
                    if cells[0].text == q[0]:
                        value = cells[1].text
                        if value == u'Установлен':
                            spans = section.findAll('tr', recursive=False)[-1].findAll('span')
                            value = ', '.join([value] + list(filter(
                                lambda a: a != u'Не заполнено',
                                map(
                                    lambda a: getattr(a, 'text'),
                                    (spans[1], cells[2], cells[3], spans[-1])))))
                        result[q[-1]] = value.strip().encode('utf-8')
            #write to output
            csvwriter_housedata.writerow(dict(result,
                                              LAT=lat,
                                              LON=lon,
                                              HOUSE_ID=house_id,
                                              ADDRESS=address.encode('utf-8'),
                                              FIAS=fias,
                                              YEAR=year.encode('utf-8'),
                                              LASTUPDATE=lastupdate.encode('utf-8'),
                                              SERVICEDATE_START=servicedate_start.encode('utf-8'),
                                              SERIE=serie.encode('utf-8'),
                                              HOUSE_TYPE=house_type.encode('utf-8'),
                                              CAPFOND=capfond.encode('utf-8'),
                                              MGMT_COMPANY=mgmt_company.encode('utf-8'),
                                              MGMT_COMPANY_LINK=mgmt_company_link.encode('utf-8'),
                                              AVAR=avar.encode('utf-8'),
                                              LEVELS_MAX=levels_max.encode('utf-8'),
                                              LEVELS_MIN=levels_min.encode('utf-8'),
                                              DOORS=doors.encode('utf-8'),
                                              ROOM_COUNT=room_count.encode('utf-8'),
                                              ROOM_COUNT_LIVE=room_count_live.encode('utf-8'),
                                              ROOM_COUNT_NONLIVE=room_count_nonlive.encode('utf-8'),
                                              AREA=area.encode('utf-8'),
                                              AREA_LIVE=area_live.encode('utf-8'),
                                              AREA_NONLIVE=area_nonlive.encode('utf-8'),
                                              AREA_GEN=area_gen.encode('utf-8'),
                                              AREA_LAND=area_land.encode('utf-8'),
                                              AREA_PARK=area_park.encode('utf-8'),
                                              #CADNO=cadno.encode('utf-8'),
                                              ENERGY_CLASS=energy_class.encode('utf-8'),
                                              BLAG_PLAYGROUND=blag_playground.encode('utf-8'),
                                              BLAG_SPORT=blag_sport.encode('utf-8'),
                                              BLAG_OTHER=blag_other.encode('utf-8'),
                                              OTHER=other.encode('utf-8')))
            return True
if __name__ == '__main__':
    session = requesocks.session()
    session.proxies = {'http':  'socks5://127.0.0.1:9150',
                       'https': 'socks5://127.0.0.1:9150'}
    try:
        session.get('http://google.com').text
    except:
        print('Tor isn\'t running or not configured properly. Read README.md')
        sys.exit(1)
    
    tid = args.id #2280999
    lvl1_link = 'http://www.reformagkh.ru/myhouse?tid=' + tid #+ '&sort=alphabet&item=mkd'
    house_link = 'http://www.reformagkh.ru/myhouse/profile/'
    #house_id = 8625429
    
    
    region = namedtuple('reg', 'lvl1name lvl2name lvl3name lvl1tid lvl2tid lvl3tid')
    #init errors.log
    f_errors = open('errors.txt','wb')
    f_ids = open('ids.txt','wb')
    
    #init csv for housedata
    f_housedata_name = args.output_name   #data/housedata.csv
    f_housedata = open(f_housedata_name,'wb')
    fieldnames_data = ('LAT','LON','HOUSE_ID','ADDRESS','FIAS','YEAR','LASTUPDATE','SERVICEDATE_START','SERIE','HOUSE_TYPE','CAPFOND','MGMT_COMPANY','MGMT_COMPANY_LINK','AVAR','LEVELS_MAX','LEVELS_MIN','DOORS','ROOM_COUNT','ROOM_COUNT_LIVE','ROOM_COUNT_NONLIVE','AREA','AREA_LIVE','AREA_NONLIVE','AREA_GEN','AREA_LAND','AREA_PARK','CADNO','ENERGY_CLASS','BLAG_PLAYGROUND','BLAG_SPORT','BLAG_OTHER','OTHER','COLD_WATER','HOT_WATER')
    fields_str = ','.join(fieldnames_data)
    f_housedata.write(fields_str+'\n')
    f_housedata.close()
    
    f_housedata = open(f_housedata_name,'ab')
    
    csvwriter_housedata = csv.DictWriter(f_housedata, fieldnames=fieldnames_data)
    
    regs = get_data_links(args.id)
    
    for reg in regs:
        if reg[5] != '' or len([i for i in regs if reg[4] in i]) == 1: #can't use Counter with cnt(elem[4] for elem in regs)[reg[4]] because of the progressbar
                print(reg[0].decode('utf8') + ', ' + reg[1].decode('utf8') + ', ' + reg[2].decode('utf8'))
                #get list of houses
                if reg[5] == '': 
                    houses_ids = get_house_list('http://www.reformagkh.ru/myhouse/list?tid=' + reg[4])
                else:
                    houses_ids = get_house_list('http://www.reformagkh.ru/myhouse/list?tid=' + reg[5])
                
                pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ', Counter(), ' of ' + str(len(houses_ids)), ' ', ETA()]).start()
                pbar.maxval = len(houses_ids)
                
                i = 0
                for house_id in houses_ids:
                    i = i+1
                    res = get_housedata(house_link,str(house_id),reg[0],reg[3],reg[1],reg[4])
                    if res == False:
                        change_proxy()
                        res = get_housedata(house_link,str(house_id),reg[0],reg[3],reg[1],reg[4])
                    pbar.update(pbar.currval+1)
                pbar.finish()
    f_housedata.close()
    f_errors.close()
    f_ids.close()

Django » Как сделать архив статей по годам и месяцам » Фев. 8, 2017 14:13:02

Здравствуйте!
Есть модель объекта - статьи
Необходимо выводить архив статей как на сайте www.djangoproject.com/weblog/
по всем годам и месяцам, в которых создавались статьи.
Помогите пожалуйста советом.

Network » module pexpect cisco asa » Фев. 8, 2017 11:45:18

надо получить информацию с asa.
мне удается подключиться по ssh
логинемся, заходим в enable
отправляем команду show arp например
 ...
child.sendline ('sh arp')
child.expect ('.asa# ')
mes=child.before
print mes
..

получаю:
 [user@co asa]$ ./asa.py
*********
[user@co asa]$
ну то есть список не выводится ..

а должно быть:
 asa# sh arp
	inside 192.168.x.x 0026.xxxx.xxxx 971
	outside 212.x.x.x 0016.xxxx.xxxx 3783
asa#

проблема кроется в child.expect ('.asa# ')
что тут указывать ?

или надо как то чистить child.before ?
не подскажите ??

GUI » PyQt5 исключения (ошибки) и цикл обработки событий » Фев. 8, 2017 00:21:05

Здравствуйте.
Объясните пожалуйста, почему из цикла обработки событий исключения не “всплывают” наружу (см. пример ниже)

 # -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__()
        self.pushButton = QPushButton(self)
        self.pushButton.clicked.connect(self.on_click)
        self.t1 = 0
    def on_click(self):
        # ZeroDivisionError
        self.t1 = 10 / 0
if __name__ == "__main__":
    import logging
    logging.basicConfig(level = logging.DEBUG, filename = u"test.log", format = u"%(levelname)-8s [%(asctime)s] %(message)s")
    logging.info( u"Start application")
    import sys
    app = QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    try:
        code = app.exec_()
    except Exception as exc:
        logging.error(exc, exc_info = True)
    logging.info( u"Stop application")
    sys.exit(code)

Python для новичков » Скрипт селениума, помощь новичку » Фев. 7, 2017 05:44:39

Добрый день, помогите еще совсем зеленому
Есть такой элемент кода,
buy_it_now = browser.find_element_by_id('binBtn_btn')
buy_it_now.click()
который входит в состав скрипта. скрипт работает на селениуме. раньше все работало, и кнопка нажималась, теперь все стопорится и фаерфокс аварийно завершается
Вот как выглядит иследование элемента, если нажать ПКМ на кнопке
http://prnt.sc/e5h2yd
а так, если редкатировать как HTML
<input _sp=“p2047675.l1356” style=“” class=“btn btn-prim vi-VR-btnWdth-XL” id=“binBtn_btn” value=“Buy It Now” onclick=“javascript:return false;” type=“submit”>
как вернуть работоспособность по клику?
Спасибо!

Python для экспертов » Как снизить сетевую нагрузку » Фев. 6, 2017 20:14:34

Доброго времени суток. Проблема такая. Есть скрипт, в скрипте есть простая функция обращения к сайту и аутентификация на нем через basic http authentication. По типу
 requests.get('http://site.com', auth=HTTPBasicAuth('user', 'pass'))

Эта функция запускается в 500 и более потоков, с помощью функции map() из пакета multiprocessing.dummy
Но такой объем потоков сильно грузит сеть. И вот вопрос, можно ли как то снизить нагрузку на сеть, не уменьшая количество потоков.
Поможет ли более низкое решение, через те же сокеты?
Мне надо только стукнуть на сайт, проверить пару, логин пароль и получить код ответа.

Django » channels создать 2 независимые группы  » Фев. 6, 2017 02:19:38

есть хороший пример на http://channels.readthedocs.io/en/stable/index.html обмена соощений между группами
нужно создать 2 независмые группы (chat и init), для обмена сообщениями, которые получают только собщения своей группы, пробовал так
 # In consumers.py
from channels import Group
# Connected to websocket.connect
def ws_add(message):
    message.reply_channel.send({"accept": True})
    Group("chat").add(message.reply_channel)
    Group("init").add(message.reply_channel)
	
# Connected to websocket.receive
def ws_message(message):
    Group("chat").send({
        "text":  message.content['text'] + 'chat',
    })
	Group("init").send({
        "text":  message.content['text'] + 'init',
    })
# Connected to websocket.disconnect
def ws_disconnect(message):
    Group("chat").discard(message.reply_channel)
	Group("init").discard(message.reply_channel)

routing.py
from channels.routing import route
from myapp.consumers import ws_add, ws_message, ws_disconnect

channel_routing = [
route("websocket.connect", ws_add),
route("websocket.receive", ws_message),
route("websocket.disconnect", ws_disconnect),
]
template.html
 //Группа chat
socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
    alert(e.data);
}
socket.onopen = function() {
    socket.send("hello world");
}
// Call onopen directly if socket is already open
if (socket.readyState == WebSocket.OPEN) socket.onopen();
//Группа INIT
socket1 = new WebSocket("ws://" + window.location.host + "/init/");
socket1.onmessage = function(e) {
    alert(e.data);
}
socket1.onopen = function() {
    socket1.send("hello world");
}
// Call onopen directly if socket is already open
if (socket1.readyState == WebSocket.OPEN) socket1.onopen();

Не получается сделать изолированные группы, сообщения приходят в обе группы

Python для экспертов » Извлечь поле с yaml file. » Фев. 3, 2017 15:37:57

import yaml
with open('form2.yaml', ‘r’) as f:
doc = yaml.load(f)
print (doc)
txt = doc
print (txt)

print (doc) - печатает весь файл, но я не могу получить ни одно поле из него.
txt = doc
Может кто-нибудь сталкивался с таким ?

Python для новичков » БОТ poloniex.com API » Фев. 2, 2017 17:45:21

Кто за деньги может помочь чтобы этот бот работалбы а не выдавалбы ошибки https://github.com/DuaneNielsen/poloniex

Django » при запуске uwsgi ImportError: No module named 'django' » Янв. 29, 2017 00:26:01

Добрый день.
ОС ubuntu 14.04
глобально поставил uwsgi
установил virtualenv, активировал его, поставил туда django
создал тестовый проект django-admin.py startproject mysite
перешел в папку mysite
выполняю команду uwsgi –http :8000 –module mysite.wsgi
но выходит ошибка

Traceback (most recent call last):
File “./mysite/wsgi.py”, line 12, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named ‘django’

если в этом окружение запустить python и сделать import django
ошибок не каких не выходит, подскажите пожалуйста в чем проблема, заранее спасибо

GUI » узнать цепочку наследования классов в pyQt / tkinter » Янв. 29, 2017 00:13:51

один класс наследует другой, потом третий и так много раз (10-20). (pyQt)
(в Py нашем Qt и заодно уж и в tkinter)

Вопрос (1): можно ли как то померять время наследования на каждом классе/объекте?
вопрос (2): можно ли узнать всю цепочку наследования до самого первого прародителя?
вопрос (3): если у меня есть метод в объекте (не мой, а наследуемый непонятно откуда, откуда-то “сверху”, от предков), как мне программно найти класс, в котором этот метод таки объявлен?

Django » Проблемы с sorl.thumbnail ([Errno 2] No such file or directory) » Янв. 26, 2017 13:16:36

Изначально загрузил аватарку для пользователя через админку.

thumbnail подхватил её, обработал и показывал в нужном виде.

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

Тоже всё отработало как надо.

Потом вернул первую аватарку назад через форму на сайте и получил ошибку:

[Errno 2] No such file or directory

показывает что ошибка в:

{% thumbnail client.photo "190x223" crop="center" as im %}

Проверил, в админке - файл есть. Проверил по трэйсбэку, к какому файлу в кэше обращается, нашёл этот файл в кэше, он там тоже есть.

Так в чём может быть проблема?

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

Флейм » Конкурс онлайн-уроков и задач Stepik Contest » Янв. 26, 2017 12:31:08

Команда образовательной платформы Stepik приглашает к участию в конкурсе по созданию задач Stepik Contest.

Категории конкурса:

Python
JavaScript
Java
Theoretical Computer Science
Applied Computer Science
Data Science

Лучшие авторы получат денежные призы.

Узнать больше и подписаться на новости можно на сайте конкурса adaptive.stepik.org.

Будем рады вашему участию и распространению информацию о конкурсе среди тех, кого вы считаете экспертами в перечисленных областях.