• Как из текста сделать Excel таблицу?

    @DollaR84
    Используйте библиотеку openxl.
    Документация: OpenXL
    Создаете книгу, лист, а затем в свой парсер с сайта добавляете код заполнения ячеек.
    Ответ написан
    Комментировать
  • Как правильно упаковать .py в .exe?

    @DollaR84
    Ну судя по ошибке - telebot не может найти файл сертификата SSL.
    Дело все в том, что при запуске exe, созданного pyinstaller, сначала все содержимое распаковывается во временную папку, а затем запускается из нее, соответственно путь другой.
    Поэтому что можно сделать в вашем случае:
    файл SSL добавить в упаковку pyinstaller, с помощью опции --add-data. Пример:
    pyinstaller -F --add-data ssl;. main.py
    Где:
    ssl - файл сертификата;
    . - точка означает текущий каталог, это если файл сертификата лежит в корне со скриптом.

    Затем в самом скрипте надо добавить следующий код:
    import os
    import sys
    def resource_path(relative_path):
        """ Get absolute path to resource, works for dev and for PyInstaller """
        if getattr(sys, 'frozen', False):
            base_path = sys._MEIPASS
        else:
            base_path = os.getcwd()
        return os.path.join(base_path, relative_path)

    Затем в том коде, где вы передаете данный файл боту, надо задавать его через данную функцию.
    Ответ написан
    Комментировать
  • Pygame. Как сделать округлые углы у прямоугольника?

    @DollaR84
    можно ли рамки и заливку прямоугольника сделать разными цветами, если да, то как?

    Тут все просто, конструктор прямоугольника имеет вид:
    pygame.draw.rect(surface, color, (x1, y1, size_x, size_y), width)
    То, что вас интересует, кроется в последнем параметре width.
    Если он задан то рисуется рамка прямоугольника заданной ширины, если его не задать, то рисуется прямоугольник с заливкой.
    Например, чтобы нарисовать прямоугольник, у которого рамка и заливка будут разных цветов, надо нарисовать два прямоугольника:
    pygame.draw.rect(surface, color1, (x1, y1, size_x, size_y))
    pygame.draw.rect(surface, color2, (x1, y1, size_x, size_y), width)


    С закругленными углами сложнее.
    Думаю там нужна работа с масками.
    Ответ написан
    Комментировать
  • Вопрос про requests.post, как сделать правильно data?

    @DollaR84
    Если надо в post передать словарь, можно просто использовать json в requests добавили такой функционал.
    пример:

    requests.post('url', json=your_dict)
    только словарь должен быть валидным
    Ответ написан
    Комментировать
  • Работа со STATIC_ROOT, STATICFILES_DIRS, MEDIA_ROOT, MEDIA_DIRS. Как работают и где следует размещать указанные в них директории?

    @DollaR84
    Общая статическая папка для проекта должна быть в корне проекта, а в приложениях свои папки static, но там есть один нюанс.
    Сначала в файле settings.py надо задать следующее, в месте где указывается static параметры:
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.normpath(os.path.join(BASE_DIR, 'staticfiles'))
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )


    затем надо организовать такую структуру папок:
    project/
        project/
            settings.py
            ...
        application1/
            static/
                application1/
                    ... тут статические файлы для приложения 1
        application2/
            static/
                application2/
                    ... тут статические файлы для приложения 2
        static/
            ...тут статические файлы для проекта
        manage.py
    ...

    То есть, в корневой директории сразу размещаются статические файлы, а в каталогах приложений, в папке static надо создать папку с именем приложения и уже в ней размещать статические файлы.
    Ответ написан
  • Как отследить ошибки 404 и записать?

    @DollaR84
    Код писал давно, возможно можно улучшить и оптимизировать, но лень было пока этим заниматься, работает, что мне надо исполняет :)
    Сначала в отдельный файл лучше скинуть несколько вспомогательных функций, чтобы не нагромождать код. Например, functools.php

    <?php
    
        function finder($string, $substring) {
            $pos = stripos($string, $substring);
            if ($pos === false) {
                return false;
            } else {
                return true;
            }
        }
    
        function cut_rows($data) {
            $result = array();
            foreach ($data as $str) {
                $row = array();
                $str = explode(" ", $str);
                $concat = false;
                $temp = "";
                foreach($str as $substr) {
                    if ((finder($substr, "[")) && (!finder($substr, "]"))) {
                        $temp = $substr;
                        $concat = true;
                    } else if ((finder($substr, "]")) && ($concat == true)) {
                        $temp .= " ".$substr;
                        $row[] = $temp;
                        $concat = false;
                    } else if (finder($substr, "\"")) {
                        $pos1 = stripos($substr, "\"", 0);
                        $pos2 = stripos($substr, "\"", ($pos1 + 1));
                    if (!($pos1 === false) && ($pos2 === false) && ($concat == false)) {
                            $temp = $substr;
                            $concat = true;
                        } else if (!($pos1 === false) && ($pos2 === false) && ($concat == true)) {
                            $temp .= " ".$substr;
                            $row[] = $temp;
                            $concat = false;
                        } else {
                            $row[] = $substr;
                        }
                    } else if ($concat == true) {
                        $temp .= " ".$substr;
                    } else {
                        $row[] = $substr;
                    }
                }
                $result[] = $row;
            }
            return $result;
        }
    
    ?>


    Теперь можно написать сам скрипт, который можно назначить на исполнение в cron, например runner.php

    <?php
    
        include('functools.php ');
        $data = file_get_contents("тут_путь_к_файлу_лога/access.log");
        $data = explode("\n", $data);
        array_pop($data);
        $data = cut_rows($data);
    
        // на данном этапе мы имеем массив строк, разбитый по колонкам
        // содержание запросов получается в колонке 4
        // у меня выбиралась статистика, поэтому готовой функции поиска запросов 404 я не делал, но думаю не составит труда составить подобную функцию
        // напомню, запрос будет в 4-м элементе данного массива $data
        // делаете перебор по нему и проверяете на необходимое вам
        // когда находите необходимый запрос - можно получить дополнительные данные следующие:
        // IP? с которого был запрос в элементе под индексом 0
        // дату можно получить под индексом 3? но она для всех данных в файле одинаковая, поэтому можно например так:
        $date = substr($data[0][3], 1, 11);
        // с 1 по 10 включительно символ - это именно дата: день, месяц и год
        // если надо время - оно в этой же строке, индексы вроде с 12 по 19 включительно, формат часы:минуты:секунды
        // но у каждого запроса оно свое. Тогда можно как-то так сделать:
        $time = substr($data[index][3], 12, 20);
        
        // ну а дальше подключение к БД и запись того что нужно, зависит от вашей структуры БД
    
    ?>
    Ответ написан
  • Как сделать, чтобы при выполнении кода в CSV файле выводилась кириллица, а не иероглифы?

    @DollaR84
    Надо внутри python преобразовать к utf-8.
    Как я понимаю это касается new['title'] и new['content'].
    Надо в вашем цикле добавить к ним decode.
    То есть:
    for new in news:
          a_pen.writerow((new['title'].decode("utf-8"), new['href'], new['date'], new['img'], new['content'].decode('utf-8')))


    UPDATE
    совместными усилиями пришли к выводу, что я некорректно понял вопрос изначально.
    Ошибка не в самом python, а в открытии файла csv в excel.
    Для открытия csv нужно в excel его импортировать и в мастере указать кодировку utf-8.
    Но это необходимо проделывать при каждом импорте csv.
    Поэтому для получения данных для excel с нормальной кодировкой лучше писать данные не в csv, а файл полноценный xlsx при помощи модуля openxl. Он позволяет создать полноценную книгу excel и записать данные прямо туда. Сохранив файл данным модулем, кодировка в excel должна открываться сразу нормально.
    Ответ написан
  • Генератор в список?

    @DollaR84
    В случае генератора списка, он создает список со всеми значениями из словаря, удовлетворяющих условию.
    В случае же вашего развернутого цикла, вы вместо списка со всеми подходящими значениями присваиваете список с одним значением. При повторном нахождении подходящего элемента вы переприсваиваете старое значение новым, а не добавляете в список.
    Чтобы цикл был эквивалентен генератору, его надо изменить как-то так:
    when = {}
    for dest in set(fls_gen.values()):
        key_list = []
        for key, value in fls_gen.items():
            if value == dest:
                key_list.append(key)
        when[dest] = key_list
    Ответ написан
    1 комментарий
  • Я не могу понять в чем проблема в моём коде?

    @DollaR84
    У вас неправильно написаны конструкторы классов.
    У всех классов методы:
    _init_
    надо заменить на:
    __init__
    Разница в том, что там по два символа подчеркивания и спереди слова и сзади.
    И у методов __lt__ и __gt__ тоже самое.
    У всех служебных методов не один символ подчеркивания спереди и сзади, а по два символа.
    Да, кстати, и метод __lt__ правильно писать с буквой "l", а не __it__.
    Короче, просто много синтаксических ошибок от невнимательности.
    Да и еще, метод __repr__ тоже пишется по два символа подчеркивания с двух сторон. И плюс код в этом методе нерабочий, с ошибками, но то уже другой вопрос, думаю там сами разберетесь по трейсбеку.
    Ответ написан
    Комментировать
  • Как добавить свой голосовой пакет в Windows Text To Speech?

    @DollaR84
    Впишу ссылку на свой ответ из комментария сюда:
    Как поменять синтезатор речи?
    Может еще кому пригодится
    Ответ написан
    Комментировать
  • Как решить следующую проблему с созданием exe файла из ру и ui файлов?

    @DollaR84
    При создании exe файла, такой путь:
    os.system('python main_gui(2).py')

    вообще не годится, он же будет запускаться только на компьютере с установленным python.
    а насчет:
    до создания .exe всё работает прекрасно, а когда использую import main_gui(2) - вроде бы импортирует всё, но соответствующий интерфейс не открывает?

    если вы используете pyinstaller для создания exe с флагом -F для создания одного exe файла, с запакованным в него содержимым, то для добавления прочих данных, таких как ui файлы, надо добавить их в параметры pyinstaller. Используется параметр --add-data, и состоит из двух значений, имени добавляемого файла и пути к нему, разделяемые знаком ";".например, если файл называется gui1.ui и лежит в той же директории рядом со скриптом, то параметры pyinstaller будут выглядеть примерно так:
    pyinstaller -F --add-data gui1.ui;. start.py
    Точка означает текущий каталог.

    UPDATE
    Вам надо в файл, загружающий данные ui файлы добавить следующий код:
    import os
    import sys
    def resource_path(relative_path):
        """ Get absolute path to resource, works for dev and for PyInstaller """
        if getattr(sys, 'frozen', False):
            base_path = sys._MEIPASS
        else:
            base_path = os.getcwd()
        return os.path.join(base_path, relative_path)

    Дальше надо производить поиск файлов через данную функцию.
    Например, в вашем случае следующим образом:
    main_window = uic.loadUiType(resource_path('gui.ui')))[0]
    class Window(QMainWindow, main_window):
    Ответ написан
    5 комментариев
  • Преобразование float в int с инициализацией переменной на лету, адекватно?

    @DollaR84
    У вас происходит неявное преобразование типов.
    в C явное преобразование выглядит так:
    int x = 2 * (a + (int) y);
    Почитать можно например тут:
    https://foxford.ru/wiki/informatika/yavnoe-i-neyav...
    Однако в C++ лучше использовать другие инструменты, например static_cast.
    Тогда ваш пример будет таким:
    int x = 2 * (a + static_cast(y));
    Вот тут про static_cast:
    https://ru.wikipedia.org/wiki/Static_cast
    Ответ написан
    Комментировать
  • Как проверить существование кнопки в wxpython?

    @DollaR84
    Можно обернуть операции с кнопкой в блок try except и проверять на AttributeError.
    Например:
    try:
    config.Btn.< ... >
    except AttributeError:
    < ... >
    else:
    < ... >
    Ответ написан
    Комментировать
  • Как поменять синтезатор речи?

    @DollaR84
    Работал с синтезатором SAPI напрямую без дополнительных библиотек. Вот короткий список необходимого кода для примера, построчно откомментированого:

    import win32com.client
    # получаем COM объект синтезатора
    speaker = win32com.client.Dispatch("Sapi.SpVoice")
    # получаем список всех доступных голосов в системе
    voices = speaker.GetVoices()
    # тут создаю список названий голосов
    voices_names = [voice.GetDescription() for voice in voices]
    # устанавливаем необходимый синтезатор из списка доступных. Для примера первый с индексом 0
    speaker.Voice = voices[0]
    # устанавливаем скорость произношения от -10 до 10
    speaker.Rate = 6
    # устанавливаем громкость голоса от 0 до 100
    speaker.Volume = 100
    # произносим фразу
    speaker.Speak('Привет.')

    В своей статье описывал создание модуля более подробно, ну кусок работы с SAPI приведен оттуда.
    Ответ написан
    Комментировать
  • Почему не появляется текст на экране pygame?

    @DollaR84
    Проблема в инициализации.
    Для конструктора pygame.font.Font надо передавать имя файла шрифта.
    Если же вы хотите использовать системные шрифты, то надо использовать другой конструктор. Пример:
    f1 = pygame.font.SysFont('arial', 36)
    В данном случае я указал шрифт Arial, можете указать любой присутствующий в вашей системе.
    Ну и конечно вначале у вас должна быть инициализация системы шрифтов:
    pygame.font.init()
    Ответ написан
    1 комментарий