• Python. Как написать скрипт для подсчета групп элементов?

    @bbkmzzzz
    Дабы меньше путаться можно сделать так:
    создаете список - проходите циклом по тексту: ищете .SUBCKT ***- добавляете строки в список, пока не наткнетесь на .ENDS ***. добавляете этот список к итоговому списку.
    список с блоками готов.
    Внутри блока тоже самое, только ищете SWITCH, а если вдруг попалось .MODEL, то все, свитчи кончились.
    Дальше все сведется к обработке\подсчету небольших блоков данных.
  • Как преобразовать цикл в строку?

    @bbkmzzzz
    А переменную-счетчик кто менять будет?
    i = 1
    s = str(i)
    
    while i < 5:
    
        driver.get("https://site.ru/index.php?all=" + s)
        i += 1 # менять счетчик не забываем
    driver.quit();
  • Как пропускать просмотренные ссылки на Python?

    @bbkmzzzz
    Можно еще вариант со словарями, но нужен уникальный идентификатор какой-то. Собираете данные в словарь, пишете в файл json. При запуске читаете словарь из файла, и в процессе работы сверяете с ним. Словарь хеширован, и скорость работы выше списков.
  • Как пропускать просмотренные ссылки на Python?

    @bbkmzzzz
    Если надо пропустить что-то, нужно это сначала сохранить, а потом сравнить с новым. Можно использовать БД, например встроенную SQLite. 500к строк это не много) запустите сверку в тестовом скрипте и замерьте время.
  • Как пропускать просмотренные ссылки на Python?

    @bbkmzzzz
    Ну так пиши в файл то, что уже обработано, при запуске читай и сравнивай с новыми, работай только с актуальными. Времени это займет не много. Дампить можно в json формате, в принципе, меньше мороки с форматом данных.
  • Как пропускать просмотренные ссылки на Python?

    @bbkmzzzz
    А зачем каждый раз? Один раз при запуске обрабатывать, потом по актуальному списку идти.
  • Как передавать данные между потоками на Python?

    @bbkmzzzz
    процесс - это отдельный процесс операционной системы. Как если вы запустите несколько калькуляторов, так тут запускаются несколько копий python. Запустите свой скрипт, и посмотрите в системном диспетчере задач. Увидите python в количестве основной + кол-во воркеров.
    Потоки существуют внутри процесса, и интерпретатор со своим процессом у них один. При завершении процесса, завершаются все его потоки. Потоки имеют общую с родительским процессом память и контекст.
  • Как передавать данные между потоками на Python?

    @bbkmzzzz
    По очередям:
    есть еще модуль queue, и там тоже есть Queue. Но multiprocessing содержит очередь, адаптированную под процессы.
    тыц

    Queue.put() выкинет исключение, если очередь полная и вышел таймаут (по умолчанию None, то есть ждет все время, пока там что-то не появится).
    Queue.put_nowait() выкинет исключение сразу, если очередь полная, таймаут не используется

    Queue.get() выкинет исключение, если очередь пустая и вышел таймаут
    Queue.get_nowait() аналогично put_nowait
  • Как передавать данные между потоками на Python?

    @bbkmzzzz
    В комментариях к коду написал

    import random
    import os
    import time
    from multiprocessing import Process, Queue
    
    
    def rnd(kolvo, resultQ):
        start_time = time.time() # Сохраняем время
        o = 0 # Количество "орлов"
        r = 0 # Количество "решек"
        kol = 0 # Всего бросков
        proc = os.getpid() # Получаем номер процесса, для отладки
    
        while kol != kolvo:
            # Кидаем монетку
            tmp = random.randint(0, 1) # возвращает всегда int
            if tmp == 0: # у нас всего два возможных варианта. (можно еще сократить, написав if tmp:, при 0 будет False)
                o += 1 # короткая форма записи, аналог x = x + 1
            else:
                r += 1
            kol += 1
    
        resultQ.put((o, r)) # Кладем в очередь объект (кортеж)
        # Для отладки
        print('Номер процесса - ' + str(proc))
        print("--- %s секунд ---" % (time.time() - start_time))
    
    
    if __name__ == '__main__': # Не понял зачем эта строка, но так работает
        start_time = time.time() # Сохраняем время
        resultQueue = Queue()  # создаем очередь
        kolvo = 2500000  # Количество бросков для каждого процесса
        procNum = 5  # количество воркеров
        processes = []  # список с процессами, дабы иметь к ним доступ, и что бы их не удалил сборщик мусора
    
        # Инициализируем (и сразу стартуем)
        for _ in range(procNum): #  переменная _ используется как и обычные, но по соглашению именно _ означает, что она
                                 #  использоваться не будет
            proc = Process(target=rnd, args=(kolvo, resultQueue))
            processes.append(proc)
            proc.start()
    
        # Для отладки
        #print("--- %s секунд --- Процессы стартанули!" % (time.time() - start_time))
    
        #  Заканчиваем (не заканчиваем, а ожидаем завершения) пока не завешится процесс к которого м ждем, выполнение останавливается
        for proc in processes:
            proc.join()
    
        o = 0
        r = 0
        for _ in range(resultQueue.qsize()):
            queueItem = resultQueue.get() # читаем из очереди
            o += queueItem[0]
            r += queueItem[1]
    
    
    
        # Считываем данные из файла и выводим их на экран
        # file = open('test.txt', 'r', encoding='utf-8')
        # read = file.readlines()
        # file.close()
        print('%% выпадения решки = %s' % (r / (kolvo * procNum) * 100))
        print('%% выпадения орла {0}'.format(o / (kolvo * procNum) * 100))
        print('Всего бросков %s' % (kolvo * procNum))
    
        print("--- %s секунд --- ВЕСЬ КОД!" % (time.time() - start_time)) # Время выполнения всего кода
  • Как передавать данные между потоками на Python?

    @bbkmzzzz
    процессы != потоки.
    multiprocessing создает экземпляр интерпретатора со своим GIL
  • Python почему объект распознаётся как str?

    @bbkmzzzz
    Что должно записываться в qt, и что туда записывается? Что за строка?
  • Как убрать повторяющиеся сообщения?

    @bbkmzzzz
    Какие критерии для "слишком часто"?
  • Ошибка expected an indented block в Python, как исправить?

    @bbkmzzzz
    if user_action == 'СТЕПЕНЬ' or user_action == 'степень' or user_action == 'Степень':

    можно сильно упростить до:

    if user_action.lower() == 'степень':
    .lower() приводит все символы строки к нижнему регистру
  • Как переименовать файлы в Python методом os.rename()?

    @bbkmzzzz
    Я сейчас попробовал, у меня все корректно определяет. Даже если файл существует с таким же именем, как и директория, все работает корректно.

    if os.path.exists('D:\\Documents\\extest\\extest'):
    выводит True если в 'D:\\Documents\\extest\\' есть файл extest (без расширения)
    и false, если его удалить.
    Python 3.6.5
  • Как переименовать файлы в Python методом os.rename()?

    @bbkmzzzz
    exists проверяет, существует ли объект по пути, а isfile - является ли объект по пути именно файлом. Но в данном случае без разницы, скорее всего.
  • Как передать переменную из одной функции в другую?

    @bbkmzzzz
    Оно выводит ровно то, что вы туда записали. Если вы не изменяли атрибут после создания, там ничего и не появится.
  • Как переименовать файлы в Python методом os.rename()?

    @bbkmzzzz
    проверять наличие файла, если есть - переименовывать
    if os.path.exists(path):
        os.rename(file, file)
  • Как передать переменную из одной функции в другую?

    @bbkmzzzz
    атрибут, как переменная, должен быть создан. Он создается в методе init_twoWind. Пока не вызовется этот метод атрибут не существует, и вполне закономерно сыпется ошибка.
    Все атрибуты желательно инициализировать в __init__().

    Добавьте туда
    self.entryFileName = 'self.entryFileName not changed!',

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

    @bbkmzzzz
    Что именно?
    self.entryFileName - атрибут объекта, доступен во всем объекте. Его не надо никуда передавать. К нему достаточно просто обратиться.
  • Как сделать это на python?

    @bbkmzzzz
    порта 80000 не существует. Диапазон 0 - 65535
    Слушать можно любой, который еще никто не слушает, порты номером до 1024 на Windows требуют прав администратора.
    TCP предоставляет СЫРЫЕ сокеты. Все сами. Пришли данные - надо прочитать. Парсить - пишите парсер. Несколько запросов одновременно - несколько потоков, или asyncio. Как напишите так и будет.
    Это решение не для прода, это поучить язык и выполнять одну задачу без фреймворков.
    Тут про сокеты подробнее.