[Python] вопрос/ответ.

Discussion in 'Python' started by De-visible, 21 Jan 2009.

  1. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Если честно, то если бы на ачате были разделы скриптовые и компиллируемые языки, то так бы оно и было, а так то деление получается на усмотрение модератора, выходит что тема для тех кто начинает на нем программировать торчит в разделе C/C#, а вопрос/ответ в PHP/PERL непохек =/
     
  2. Admin Derek

    Admin Derek New Member

    Joined:
    20 Apr 2008
    Messages:
    9
    Likes Received:
    1
    Reputations:
    -5
    ага, спасиба всем за помощь блин :D
    сам нашел уже))

    Спасибо, e4key
    за ссылку^^
     
  3. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    поиск по античату - авторизация вконтакте на python и cgi - De-Visible положил готовую функцию для авторизации
     
  4. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Зачем? Хороший пример есть в документации.
    К тому же, я считаю, чтоб писать маны какие-то по программированию, надо самому быть спецом в данной теме. Я себя таковым пока не считаю...
     
  5. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Я себя тоже не считаю спецом, но когда тебе долбят асю по 3 раза в день с вопросами такого содержания :
    "А я вот тут вот кароче знаю PHP, вчера установил Python и вот тут кароче нужно многопоточность прикрутить к скрипту, но CURL я типа юзать не хочу, так как это не многопоточность".
    Тогда приходится ставать спецом по Python и писать статьи по многопоточности, причем именно с Queue так как люди не хотят врубаться даже в понятие замка, и если честно, то Queue я уже давненько не использовал ибо незачем, это тот же самый список с замками, своих аналогов можно написать вагон и тачечку сверху. Вот только если уж начал, то договаривай - чем же нерационально использование Queue в таком случае ?
     
  6. Admin Derek

    Admin Derek New Member

    Joined:
    20 Apr 2008
    Messages:
    9
    Likes Received:
    1
    Reputations:
    -5
    эйй...всех с трауром во первых..=)
    далее..

    Мне вот надо найти на .php странице определенную строку(ну это контакт как бэ wall.php)

    строка 114:

    <div class="summary">Показаны записи 1 - 20 из 2710.</div>

    и записать это в переменную...
     
  7. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Отпарси регуляркой:
    Code:
    result = re.search(r"<div class="summary">(.+?)</div>", page_data)
    print(result.groups())
     
  8. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Code:
    import re
    page = urllib.urlopen("http://www.vkontakte.ru/wall.php").read()
    peremennaya = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", page)[0]
    print peremennaya
    
     
  9. n3m0

    n3m0 Elder - Старейшина

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    Например так:

    Code:
    >>> value = 123
    >>> 'value' in globals()
    True
    >>>  'value1' in globals()
    False
    
    также если в функции, то можно применить locals()
     
    1 person likes this.
  10. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Лучше все же использовать исключения.
     
    1 person likes this.
  11. Admin Derek

    Admin Derek New Member

    Joined:
    20 Apr 2008
    Messages:
    9
    Likes Received:
    1
    Reputations:
    -5
    razbх,
    login999,
    спасиба, щас попробую =))
     
  12. Admin Derek

    Admin Derek New Member

    Joined:
    20 Apr 2008
    Messages:
    9
    Likes Received:
    1
    Reputations:
    -5
    вот..доделал, проверка стены)) на новое сообщение, пок..без всяких оповещений..просто с текстом New Message..плиз оцените, это мой первый скрипт...)

    Code:
    import urllib2, urllib
    import cookielib
    import re, time
    import string
    #from urllib2 import urlopen 
    
    ########################
    # Satan Wall 1.0(final) #
    ########################
    
    Email = '[email protected]' #мыло
    pas = 'win7' #пасс
    SiteWall = 'http://vkontakte.ru/wall.php?id=7' # ид стены
    
    #начало подключение
    def connect():    #создадим отдельную функцию для подключения, в дальнеишем может пригодиться)
        cookie = cookielib.CookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
        urllib2.install_opener(opener)
        headers = {"User-Agent" : "Mozila/4.0 (compatible; MSIE 5.5; WindowsNT)"}
        page=urllib2.urlopen(urllib2.Request('http://vkontakte.ru/login.php?email='+Email+'&pass='+pas,None,headers)).read()
        print 'On-line' #подключились =)
    
    #первая проверка стены
    tempVK = 0  #переменная для первого подключения
    Error = 0   #счетчик ошибок
    
    def WallOn(wall): #функция самой проверки
        time.sleep(5)  #пауза в 5 секунд, а куда торопиться?!))
    #    NewWall = wall  #ровняем старую стенку новой и...
        NewWalltemp = urllib2.urlopen(SiteWall).read() #...открываем стенку
        NewWall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", NewWalltemp)[0]
    #    print 'god, ', NewWall     проверка, для отладки
        if wall == NewWall: #проверяем есть ли разница между первым и вторым значением стены, промежуток..кххм)
            WallOn(wall)    #если всё так же, вызываем эту же функцию..вдруг всё же напишут xD
        else:   #но если написали
            print 'New message' #говорим сразу мне
            walltemp = urllib2.urlopen(SiteWall).read()
            wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0]
    #        wall = NewWall #записывем новую стену заместо старой)
            NewWall = 'clear' #и очишаем переменную, чтобы не повторялось каждые 15 секунд о новом сообщений)
            WallOn(wall)    #запустим функцию заново =)
    
    def body(tempVK, Error):
        if tempVK == 0: #если это первоая проверка, то записываем в переменную значиение стенки)
            walltemp = urllib2.urlopen(SiteWall).read()    #вот так вот это делаем)
            wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0]
    #        print 'ok, ', wall     #приверка, для отладки
            tempVK = 1 #гооврим прямо, на сегодня хватит)
            WallOn(wall)    #и вызовим функцию =))
        else:   #если же это уже не первая проверка, и произошла какая то ошибка, то...
            walltemp = urllib2.urlopen(SiteWall).read()
            wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0]
            Error += 1  #прибавляем счетчику ошибок число
            print 'Error: ', Error  #и в слезах жалуемся мне))
            WallOn(wall)  #...передаем параметр стены
    
    
    ###########НАЧАЛО КАК НЕ СТРАННО ТУТ, В КОНЦЕ!!!##############
            
    connect()   #вызовем функцию, тоесть начнем соединение
    body(tempVK, Error)    #проверим стену первый раз
    
    эм...первый скрипт =)) всем спс за помощь =))
     
    1 person likes this.
  13. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Ок, раз тебе интересно, поясню. В том скрипте в очередь помещается 250 практически идентичных кортежей, затем поточная функция вытягивает их по-одному и использует. Но зачем? Вся эта почти одинаковая инфа ведь зазря отъедает память процесса. Можно было бы обойтись простым итератором в поточной функции, ведь его содержимое (кортежа) заранее известно. Нужно лишь использовать Lock на строке с итерацией (что, вообще говоря, элементарно как в использовании, так и для понимания).
    Queue хорош в гораздо более сложных случаях - например, когда ты "демонизируешь" несколько потоков для обработки ими каких-то данных, а данные эти, например, могут поступать из другого процесса, и т.п...
     
    #313 cr0w, 1 Sep 2009
    Last edited: 1 Sep 2009
    1 person likes this.
  14. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Эх, я-то думал дейстивтельно что-то серьезное :)
    Обьясню -я использую Queue по-разному, одним из таких случаев было когда у меня отдельный поток обрабатывал его наполнение и создавалась динамическая подгрузка из файла :)
    В случае проблем с соединением строка добавлялась обратно в Queue, то что там тебе так не понравилось это :
    1) Учебный пример, я лично считаю что в учебных примерах абсолютно пофигу на нагрузку, так как он должен быть читабельнее
    2) Это заранее закидон в ту сторону чтобы сразу смотреть в сторону Queue, тот кто понял о чем там написано, тот и поймет недостатки примера, а уников которые любят скопипиздить и всунуть пару своих изменений ожидает глубокое разочарование - так как для реального использования пример не покатит.
    P.S. Очень дохера таких уников :)
     
  15. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    login999

    Я бы может и поспорил с тобой насчет того, какими должны быть учебные примеры, но это, как я уже понял, бессмысленно...
     
    1 person likes this.
  16. R[00]T1X

    R[00]T1X New Member

    Joined:
    17 Feb 2009
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    Изучаю питон и не как не могу разобраться с регулярным выражением.
    Помогите пожалуйста разобрать строку "textone:texttwo" что бы строка до двоеточия была в одной переменной и после двоеточия во второй переменной. Заранее благодарю.
     
    #316 R[00]T1X, 8 Sep 2009
    Last edited: 8 Sep 2009
  17. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    R[00]T1X Не забивайте гвозди микроскопом
    Code:
    str = "textone:texttwo"
    a,b = str.split(':',1)
    print a, '-', b
    Но если очень хочется:
    Code:
    import re
    str = "textone:texttwo"
    a, b = re.search('(?msi)([^:]+):(.+)',str).groups()
    print a, '-', b
     
    _________________________
    #317 Gifts, 8 Sep 2009
    Last edited: 8 Sep 2009
    1 person likes this.
  18. R[00]T1X

    R[00]T1X New Member

    Joined:
    17 Feb 2009
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    Gifts
    вот это точно. :) Спасибо за первый вариант.
     
    2 people like this.
  19. rich32

    rich32 Banned

    Joined:
    26 Feb 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Где можно найти декомпилятор pys ?
     
  20. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Под кого копаем ?
    Имя файла в ПМ пожалуйста ...