Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

GUI » Сигнал в дочерний поток. » Март 20, 2014 07:17:00

Знаю как послать сигнал из потока, а вот как послать сигнал в поток не доходит.
Прошу помощи, буду благодарен за пример в пару строк. Спасибо.

Базы данных » FBD - проблемы при вставке » Март 19, 2014 11:38:44

Добрый !

Инструменты: win7 64, python 3.3.4 x86, Excel 2010, Firebird 2.5.2 x64, fdb 1.4
Задача: открыть файл Excel и записать из него данные в БД FB. Особенности - файл из офиса 2003 (7 листов по 65000 элементов, итого примерно 450 000 элементов)

код
# coding: utf-8
from win32com.client import Dispatch
import pythoncom
import datetime
import sys
import fdb
#==================================================================      
def main(argv=None):
    start_time=datetime.datetime.now()
    print(start_time)
    fb_conn = fdb.connect(dsn='firebird:d:\\pgn.FDB',user='user',password='password')
    trans=fb_conn.trans()
    trans.begin
    fb_cur=trans.cursor()
    sql_prep=fb_cur.prep(r"INSERT INTO gpk_input (lat_name,name,to_date) VALUES (?,?,?)")
    
    xlApp = Dispatch("Excel.Application")
    xlApp.Visible=False
    xlWb = xlApp.Workbooks.Open(r"D:\Documents\children.xls")
    try:
        for Sheet in xlWb.WorkSheets:
            print("Sheet=",Sheet.Name," ",datetime.datetime.now())
            for y in range(2,10):
                if str(Sheet.Cells(y,1)) != 'None':
                    # Sheet.Cells(y,1) - ФИО в латинской транскрипции
                    # Sheet.Cells(y,2) - ФИО на русском
                    # Sheet.Cells(y,3) - дата чего-то . Пока не интересно
                    dt1=str(Sheet.Cells(y,3))
                    dt1=dt1[0:19]
                    dt1=str(dt1[8:10])+'.'+str(dt1[5:7])+'.'+str(dt1[0:4])+' '+str(dt1[11:])
                    print(type(Sheet.Cells(y,2)))
                    rus_name=str(Sheet.Cells(y,2))
                    print(type(rus_name))
                    print('-------\n','orig=',rus_name)
                    fb_cur.execute(sql_prep,[Sheet.Cells(y,1),rus_name.encode('utf-8'),dt1])
        trans.commit()
        fb_cur.close()        
        trans.close()
    except Exception as e3:
        print("main try:","Line "+format(sys.exc_info()[-1].tb_lineno),e3.__str__())
        print("Sheet='",Sheet.Name,"' y=",y)        
        trans.rollback()
        fb_cur.close()
        trans.close()
        
    xlApp.Quit()        
    fin_time=datetime.datetime.now()
    print(fin_time," | ",fin_time-start_time)

при выполнении из cmd.exe дает такую ошибку
('Error while executing SQL statement:\n- SQLCODE: -413\n- conversion error from string “КАСАТКИНА АЛЕНА”\n- conversion error from string “КАСАТКИНА АЛЕНА”\n- conversion error from string “КАСАТКИНА АЛЕНА”', -413, 335544334)

и при изменении запроса на явное приведение к типу - тоже
r"INSERT INTO gpk_input (lat_name,name,to_date) VALUES (?,CAST(? AS VARCHAR(50)),?)"

Такая же ошибка при инсерте чисто латинской строки, т.е получается вопрос не в кодировке кирилицы (сперва про нее думал)

GUI » PyQt, визуальный редактор словаря » Март 18, 2014 12:11:09

Здравствуйте,
Подскажите, как сделать на PyQt окошко, аналогичное редактору свойств в Qt дизайнере. Мне это надо для редактирования словарей и подобных структур.

Python для экспертов » pyUSB определить порт » Март 16, 2014 10:33:25

Привет, есть такая задача, я нашел свое устройство через pyusb но вот не пойму как мне узнать какой же оно порт заняло?
Устройство uart. так то я знаю что оно сидит на /dev/ttyACM0

Python для новичков » Некорректная записи символов Unicode в postscript » Март 14, 2014 15:31:05

import Tkinter as tk 
def fileSave():
    c.postscript(file='XXX.ps',height=300, width=300, fontmap=(font,size_font),colormode="mono")
        
master1 = tk.Tk()
master1.geometry('300x300')
frame1=tk.Frame(master1)
frame1.pack(side=tk.TOP,fill=tk.X)
frame2=tk.Frame(master1)
frame2.pack(side=tk.TOP, fill=tk.BOTH,expand=tk.NO)
font = 'txt'
size_font=30
button_seve=tk.Button(frame1,text="save",font=('txt 12'),command = fileSave)
button_seve.pack(side = tk.LEFT)
canvas=tk.Canvas(frame2)
c=canvas
c.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)
t=u'\u2205'
c.create_text(100,100,text=t, font=(font,size_font),fill='black')
c.create_line(120,120,120,80,fill='black')
master1.mainloop()

Нажатием кнопки “Save” создается файл postsсript с содержимым канваса. При открытии файла в evince оказывается, что символ диаметра заменен на “?”.
OS WinXP sp3, Python 2.7.5,
Подскажите пожалуйста, как решить проблему?

Инструментальные средства разработки » Selenium WEBDRIVER (python) vs Codeui test (С#) » Март 14, 2014 10:55:10

Хотелось бы выслушать мнения по САБЖ в пользу одного или другого.
Выбираем средство для тестирования программы управления на веб с сложным интерфейсом.
Важна скорость разработки тестов и покрытие всех браузеров.

Data Mining » сложный xpath-запрос » Март 10, 2014 21:45:07

ребят, помогите пожалуйста извлечь данные

есть страница интернет-магазина. нужно вытащить описание товара и поместить его в словарь следующего вида:
data['Product Composition'] = '93% Polyamide 7% Elastane Lining: 100% Polyester</p><p>Dress Length: 90 cm'
    data['Product Attributes;'] = ': Boat Neck, Long Sleeve, Midi, Zip, Concealed, Laced, Side Lining Type: Full Lining'

вот моя попытка это сделать:
import lxml.html
import requests
import pprint
def get_doc(url):
    try:
        req = requests.get(url)
    except requests.exceptions.ConnectionError as exc:
        print('A Connection error occurred. ', exc)
    else:
        doc_html = req.text
        doc_obj = lxml.html.document_fromstring(doc_html)        
        return doc_html, doc_obj
req = get_doc('http://en.modagram.com/women/open-back-velvet-dress-claret/detail/37803/168598')
doc_html, doc_obj = req
        
details = {}
base_details_query = doc_obj.xpath('//section[@id="ProductInfo"]/div[contains(concat(" ", normalize-space(@class), " "), " TabItem ")]')
if len(base_details_query):
    base_details_query = base_details_query[0].xpath('//p/strong')
    if len(base_details_query):
         for dict_title in base_details_query:
            p = dict_title.getparent()
            print(dict_title, dict_title.text, p, p.text, '-----')
            desc = []
            while p is not None and not p.xpath('.//strong'):
                desc.append(p.text)
                p = p.getnext()
            details[dict_title.text] = " ".join(desc)
    pprint.pprint(details)

но мой код не работает почему-то. помогите пожалуйста исправить, если это возможно вообще


тэгов <p> и <strong> может быть любое количество

Django » Подскажите решение для админки по работе с изображениями совместимое с grappell? » Март 6, 2014 10:56:10

Хотелось бы мультизагрузку изображений в одной форме(вместо инлайнов)
И вывод миниатюр в админке.
Чтоб это всё под grappelli работало.

Могу и сам вс запилить, времени надо больше, хочется готовое…

GUI » PyQt4 py-postgresql PostgreSQL » Март 4, 2014 19:46:16

Как ввести данные через экранную форму в PostgreSQL ?
(Используя PyQt4 py-postgresql PostgreSQL)Linux.
Небольшой пример.

Python для новичков » Оптимальная передача данных из родительского процесса » Март 4, 2014 09:19:08

Здравствуйте. Есть небольшое приложение на tornado. Клиент подключается по вебсокетам, и начинается довольно существенное вычисление. Вычисление вынес в отдельный процесс, клиентов может быть много. Но по клику от пользователя, расчет должен остановиться.
Пока сделал через multiprocessing.Manager - в дочернем процессе проверяется словарь раз в какое то время, и при наличие переменной в нем, останавливаю расчет. Насколько это хорошо? Еще проблема в том , что этот менеджер видимо создает дополнительный процесс. И он почему то не убивается((
Какие еще есть варианты?)
Спасибо.

Флейм » Не получается создать тему на форуме,  » Март 4, 2014 02:12:16

Поиском нахожу интересующую тему, исчезает "создать тему

Python для новичков » Нужна помощь.... » Фев. 28, 2014 18:16:47

Господа, прошу помощи…два часа бился с файлами, не смог декомпилировать… Если кто сможет помочь, буду благодарен, нужна два скриптика перекомпилировать под свежий Питон 2.7
Заранее спасибо

GUI » Tkinter Text undo/redo стек » Фев. 28, 2014 15:22:26

Есть ли возможность проверить undo/redo стеки виджета Text, пустые они или нет, без изменения самого текста. У меня получается только так:

import tkinter as tk
class CustomText(tk.Text):
    def __init__(self, parent=None):
        tk.Text.__init__(self, parent, undo=True, wrap='word')
        self.pack(expand=1, fill='both')
        self.cmenu = tk.Menu(self, tearoff=False)
        self.cmenu.add_command(label='Undo',
                            command=self.undo,
                            accelerator='Ctrl+Z')
        self.cmenu.add_command(label='Redo',
                            command=self.redo,
                            accelerator='Ctrl+Y')
        self.bind('<ButtonPress-3>', self.right_but_bind)
    def right_but_bind(self, event):
        #Проверка изменялся ли текст
        #Для Undo
        if self.edit_modified():
            self.cmenu.entryconfig(0, state='normal')
        else:
            self.cmenu.entryconfig(0, state='disabled')
        #Для Redo
        try:
            self.edit_redo()
        except:
            print('Стек redo пуст')
            self.cmenu.entryconfig(1, state='disabled')
        else:
            self.edit_undo()
            self.cmenu.entryconfig(1, state='normal')
        pos_x = self.winfo_rootx() + event.x
        pos_y = self.winfo_rooty() + event.y
        self.cmenu.tk_popup(pos_x, pos_y)
    #Отменить действие
    def undo(self):
        self.edit_undo()
    #Вернуть действие
    def redo(self):
        self.edit_redo()
if __name__ == '__main__':
    root = tk.Tk()
    root.title('Custom Text')
    frm = tk.Frame(root)
    CustomText(frm)
    frm.pack()
    root.mainloop()

Если undo можно проверить и без проверки самого стека, с redo так не получится.
Интересует как сделать чтобы можно было включать/отключать соответствующие пункты меню, в зависимости от стеков.

Python для новичков » Как открыть еще один видео поток в окне с уже открытым видео потоком в OpenCV (Python)? » Фев. 27, 2014 07:46:25

Как открыть еще один видео поток в окне с уже открытым видео потоком в OpenCV (Python)?
То есть, конкретно нужно в том же окне, в котором выводится видео с камеры, открыть еще одно окошко с другим видео потоком. Кто-нибудь видел подобное решение?

Python для экспертов » Twisted EsmtpSenderFactory. Как не слать email? » Фев. 26, 2014 10:01:07

Хочу написать smtp-клиент с помощью твистед. Нашел примеры, получилось рассылать сообщения с помощью ESMTPSenderFactory. Но я никак не пойму как его готовить. Как мне например сделать так, чтобы сообщения не рассылались, а происходила только авторизация?

GUI » Обновление виджета » Фев. 25, 2014 11:00:16

    app = QApplication(sys.argv)
wdgt = MyWindow()
wdgt.show()
wdgt.tableModel._setRowsCount(10)
Виджет представляет собой таблицу , а функция setRowsCount изменяент кол-во строк . В данном случаем она не работает.Если потсавить её перед show () :
   app = QApplication(sys.argv)
wdgt = MyWindow()
wdgt.tableModel._setRowsCount(10)
wdgt.show()
Сейчас она работает . Отсюда такой вопрос , как сделать так что бы табличка менялась после функции show().

Python для новичков » pyCurl и smtp » Фев. 24, 2014 05:10:04

Приветствую.
Подскажите, как подключиться, например к smtp.mail.ru посредством pyCurl?

делаю так (стандартно, вроде как)
import pycurl
c = pycurl.Curl()
c.setopt(pycurl.URL, 'smtp://smtp.mail.ru')
c.perform()

скрипт подвисает в ожидании ответа. Как быть?

Django » Django RSS  » Фев. 20, 2014 14:24:51

Как в ленте новостей изменить дизайн, убрать лишние кнопки и изменить стандартный текст?

Django » cx_Oracle с какогото удваивает количество аргументов в sql коде метода bulk_create() » Фев. 20, 2014 10:24:56

Oracle database 11.2, Oracle Linux 6, python3.3, django 1.6, cx_Oracle 5.1.2

Проблема начилась с подвисания выполнения метода bulk_create при 10000 записей.
Опытным путём удалось установить, чтоб генерируется отвратительный sql-код.
Пример:
class Author(models.Model):
    name = models.CharField(max_length=100)
    mail = models.EmailField(max_length=254)

>>> from app_main.models import *
>>> a = Author.objects.using('ORACLE')
>>> from django import db
>>> reset = db.reset_queries
>>> conns = db.connections['ORACLE']
>>> a_list = [Author(name='CONSOLE', mail='ma@na.vd') for _ in range(10)]
>>> reset()
>>> conns.queries
[]
>>> a.bulk_create(a_list)
[<Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>]
>>> conns.queries
[{'sql': 'QUERY = \'INSERT INTO "APP_MAIN_AUTHOR" ("NAME", "MAIL") SELECT :arg0, :arg1 FROM DUAL UNION ALL SELECT :arg2, :arg3 FROM DUAL UNION ALL SELECT :arg4, :arg5 FROM DUAL UNION ALL SELECT :arg6, :arg7 FROM DUAL UNION ALL SELECT :arg8, :arg9 FROM DUAL UNION ALL SELECT :arg10, :arg11 FROM DUAL UNION ALL SELECT :arg12, :arg13 FROM DUAL UNION ALL SELECT :arg14, :arg15 FROM DUAL UNION ALL SELECT :arg16, :arg17 FROM DUAL UNION ALL SELECT :arg18, :arg19 FROM DUAL\' - PARAMS = (\'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\')', 'time': '0.158'}]

Как видно вместо 10 параметров он генерирует :arg0 - :arg19, из-за этого жутко проседает скорость выполнения на других запросах и бОльшем количестве записей. Я в шоке, что за х….
Что я делаю не так? Кто с подобным сталкивался? Может проблема не в cx_Oracle?
Цель - нормально прогнать все джанговские методы на Oracle.

GUI » Проблема с PyQt(QAbstractTableModel ) » Фев. 20, 2014 07:06:59

Суть проблемы хочу создать табличку . В интернете нашёл много способов где создаётся модель QATM и переопределяются её функции . Вопрос такой , можно ли создать модель без переопределения функций , может подать данные во входные и параметры ?
def data(self, index, role):
if not index.isValid():
return None
elif role != Qt.DisplayRole:
return None
print (index())
return (self.tableData)
Тут self.data список списков . Не понимаю как происходит добавление данных в таблицу , и как получается / изменяется индекс .

На питоне программирую месяц , на PyQt 3 день , извиняюсь за глупые вопросы .