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

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

  1. jasd

    jasd New Member

    Joined:
    22 Apr 2009
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    еще есть вопрос: что такое django?
     
  2. Forcer

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

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    фреймворк для построения веб-приложений на python'e
     
  3. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Насчет указания кодировки 15 файлам - это да.
    А вот насчет 15 файлов в разных кодировках, то я такого изврата еще не видел. Не вижу смысла практического использования даже.
     
  4. InFlame

    InFlame Banned

    Joined:
    27 Oct 2008
    Messages:
    207
    Likes Received:
    32
    Reputations:
    0
    Код на Пёрле:
    Code:
    my $per = pack('V', 0x71AB9372);
    Как сделать аналогично на Питоне?
     
  5. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Code:
    import struct
    
    per = struct.pack("<L", 0x71AB9372)
    
    Дальше в зависимости от того что и как там нужно.
    Смотри справку по модулю struct

    upd. Кажется так (аналог "V" для PERL, если я не ошибаюсь)
     
    #485 login999, 5 Jan 2010
    Last edited: 5 Jan 2010
    1 person likes this.
  6. Ice_VeNOm

    Ice_VeNOm Member

    Joined:
    5 Sep 2009
    Messages:
    36
    Likes Received:
    9
    Reputations:
    0
    Code:
    def bash():
        res = urllib.request.urlopen('http://bash.org.ru/random')
        res= str(res.read())
        s=re.search(r"<div>(.*?)<\/div>",res)
        for x in s.groups():
                print(x.decode('cp1251'))
    
    Как сделать, чтобы выводил русский текст?

    python v. 3.1
     
  7. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    В 3.1. по-другому нужно
    попробуй так.
    Code:
        res = urllib.request.urlopen('http://bash.org.ru/random')
        res= res.read()
        s=re.search(r"<div>(.*?)<\/div>",res)
        for x in s.groups():
                print(x.decode('cp1251').encode("cp866"))
    
     
  8. Ice_VeNOm

    Ice_VeNOm Member

    Joined:
    5 Sep 2009
    Messages:
    36
    Likes Received:
    9
    Reputations:
    0
    Таже самая ошибка
     
  9. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Code:
        res = urllib.request.urlopen('http://bash.org.ru/random')
        res= res.read().decode('cp1251')
        s=re.search(r"<div>(.*?)<\/div>",res)
        for x in s.groups():
                print(x.encode("cp866"))
    
    А так ?
    П.С. Винда ?
     
  10. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Там в 3.1 меня напрягает этот bytes тип данных. Мне, как привыкшему к 2.6 сложно выкупить там все эти хитросплетения. Фактически, у bytes есть возможность сделать только .decode(), после которого они превращаются в str в кодировке UTF-8, обьекты типа str можно только encode() в bytes кодировки, указанной при вызове encode(). Т.е после .decode получаем str с возможностью вызова только .encode(), а после encode() получаем bytes с возможностью вызова исключительно .decode() для получения str.
    Какая-то блин слишком strict работа с кодировками ИМХО.
    Я привык к типу данных unicode в 2.6 который мне уже кажется очень простым и гибким при работе с кодировками.
    Хотя я конечно, в экстазе от:
    Code:
    import sys
    
    def жаба():
        print "Я квакаю".encode(sys.getdefaultencoding())
    
    Судя по отсутствию комментов к этому посту скорее всего все подумали "Какого хрена он это написал???"
    Обьясню код от rushter с точки зрения Python 3.1 и Python 2.6:
    Code:
    # -*- coding: UTF-8 -*-
    
    import re,urllib
    
    res = urllib.urlopen('http://bash.org.ru/random')
    res= res.read().decode('cp1251')#Вот здесь вот с точки зрения Python2.6 Идет: .read() - чтение данных, которые имеют тип str(некая абстрактная строка в неизвестной кодировке(для python)),потом идёт перевод этой строки в тип unicode(это для Python едино и понятно). С точки зрения Python3.1 здесь при .read() идёт чтение в этот новый тип bytes, которые представляют собой "просто байты", работать с этим типом как со строковыми данными нельзя, для этого необходимо сделать .decode() из кодировки этих байтов, в результате чего они преображаются в тип str, который являет собой строку в кодировке UTF-8 (фактически, насколько я понял, str - это тот же unicode, просто что все четко прописано)
    s=re.search(r"<div>(.*?)<\/div>",res)
    for x in s.groups():
    print(str(x))#Вот здесь идет вывод собранных данных в консоль, вот здесь то меня и напрягает то, что на печать все пошло нормально, либо Python автоматически переводит весь вывод в кодировку терминала, либо у Ice_VeNOm кодировка терминала - UTF-8. И вот такое преображение в str()оно здесь не нужно нафик (по идее)
    
    Хз короче, путаница одна с этим Python 3.1. Мб кто из опытных обьяснит, что там с этим bytes и str, ато я вроде и понимаю что они это типа аналог unicode из 2.6, и все равно как-то стремно их воспронимать так же =\
     
    #490 login999, 8 Jan 2010
    Last edited: 8 Jan 2010
  11. Ice_VeNOm

    Ice_VeNOm Member

    Joined:
    5 Sep 2009
    Messages:
    36
    Likes Received:
    9
    Reputations:
    0
    rushter, Спасибо
     
  12. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    py2exe и MySQLdb [RSS Feed]

    есть скрипт, парсер лог файла, после парсинга данные заносятся в базу
    попытался скомпилировать в exe, после запуска ехешника получил ошибку
    попробовал скомпилировать простейший скрипт print "Hello World!" - все нормально ехешник работает
    попробовал добавить первые строки кода парсера
    Code:
    import re
    import time
    import os
    import MySQLdb
    
    получил ошибку

    D:\Python!\PARSER\dist>hello.exe
    Traceback (most recent call last):
    File "hello.py", line 4, in <module>
    File "MySQLdb\__init__.pyc", line 19, in <module>
    File "_mysql.pyc", line 12, in <module>
    File "_mysql.pyc", line 10, in __load
    ImportError: DLL load failed: =х эрщфхэ єърчрээvщ ьюфєы№.

    как решить эту проблему с mysqldb?
     
  13. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Посмотри какие там есть DLL-ки и закинь их в c:\python\dll
    P.S. Рекомендую GUI2exe - это написанный на wxpython Гуи-интерфейс для "Собиралок" в экзе
     
  14. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    по совету с другого форума уже посмотрел с помощью depends каких длл не хватает и прописал их в setup.py

    все заработало
    но есть еще один вопрос, запускаю ехе через командную строку
    вначале идет такая строка
    D:\Python!\PARSER\dist\library.zip\MySQLdb\__init__.py:34: DeprecationWarning: the sets module is deprecated

    что то про устаревший модуль, стоит разбираться с этим или ничего страшного?
     
  15. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Ничего страшного, это простой ворнинг, не более того. это информация на заметку скорее для разработчиков py2exe, чем для тех кто им пользуется :)
     
  16. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    на ХР все работает без проблем
    попробовал на винсервер 2003
    программа зависает и через секунд 10 закрывается без ошибок
    проверил длл - не хватало msjava.dll и msvcr90.dll
    добавил, попробовал снова запустить - все равно зависает

    поставил туда питон
    запускаю скрипт
    зависает на этой строке
    Code:
    db = MySQLdb.connection(host="localhost", user="root", passwd="", db="test")
    висит 5-10 секунд, потом и редактор и шелл закрываются без ошибки

    в чем может быть проблема?
     
  17. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Смахивает на то, что по таймауту рвет соединения. А мускул крутится ?
    P.S. Попробуй через командную строку запустить. Мб фаер режет.
     
    #497 login999, 12 Jan 2010
    Last edited: 12 Jan 2010
  18. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    через командную строку вроде пустило
    Code:
    D:\webserver\MySQL Server 5.1\bin>mysql -u root -p
    Enter password: ********
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.1.39-community MySQL Community Server (GPL)
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    мускул работает нормально т.е. скрипт на пхп из мускула данные забирают без проблем
     
  19. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Я имею ввиду мб фаер режет саму твою екзеху.
    Попробуй запустить именно собранную тобой exe через консоль. Там тебе должно показать трейсбек (естественно, только в том случае, если на критической секции ошибка не убивается простым try: except что чревато "безмолвным"слетанием).Просто даже если там ошибка какая-то то не факт что ты ее увидишь - окно слишком быстро закрывается.
     
  20. Vaal

    Vaal New Member

    Joined:
    8 Jan 2010
    Messages:
    37
    Likes Received:
    2
    Reputations:
    0
    через командую строку тоже самое
    никакой ошибки

    try: except в том куске кода нет

    и фаера тоже не стоит там...