• Как написать parser для txt в словарь с использованием regex pyton?

    @traims
    1. Допустим, мы хотим поймать всё, что находится между символами {## и ##}. Как будет выглядеть регулярное выражение?

    Нам всё равно, какие символы будут встречаться внутри, поэтому можно поставить точку — произвольный символ. Пусть этот символ будет повторяться произвольное число раз — добавляем звёздочку. Нам надо поймать всё, что находится между {## и ##} — добавляем круглые скобки, чтобы обозначить границы группы:
    {## (.*) ##}
    Можно немного изменить это регулярное выражение, например, поставить знак "+" вместо звёздочки — это будет означать, что произвольный символ должен встретиться хотя бы один раз (звёздочка означает, что он может встретиться ноль или более раз).

    2. Как использовать это регулярное выражение?

    Можно применять его к каждой строке файла по очереди. А можно применить ко всему файлу целиком, если он небольшой.

    Допустим, мы считываем весь файл в одну строковую переменную:
    with open('input.txt', 'r') as f:
        text = f.read()

    Тогда мы можем вытащить из него сразу всё, что нас интересует:
    import re
    pattern = "{## (.*) ##}"
    result = re.findall(pattern, text)

    Результатом будет список строк вида
    ['bonus:DS',
    'bang:fm,bv',
    'zf:123,230',
    'zf1:349,410',
    ... ]

    Здесь каждую строку можно разбить на две:
    s = 'bonus:DS'
    s.split(':')  # получаем ['bonus', 'DS']

    — и дальше действовать как потребуется.

    3. Что получится, если включить двоеточие сразу в регулярное выражение?

    Чтобы обойтись без использования split(), можно изначально включить двоеточие в наше регулярное выражение:
    pattern = "{## (.*):(.*) ##}"
    Результатом будет список кортежей:
    [('bonus', 'DS'),
    ('bang', 'fm,bv'),
    ('zf', '123,230'),
    ('zf1', '349,410'),
    ... ]


    4. Как собирать различные структуры данных с нуля?

    Примеры того, как можно собрать с нуля списки, словари и кортежи. Все примеры легко проверить в командной строке.

    Списки:
    list = []
    list.append('a')

    Пары ключ-значение (словари):
    d = dict()
    d['a'] = '123'

    Кортежи:
    x = '123'
    y = '456'
    tuple = (x, y)

    По идее, этой информации должно быть достаточно, чтобы вы смогли разобраться в путях решения задачи. Удачи!
    Ответ написан
    Комментировать
  • Как найти позицию максимального элемента в списке?

    Лучше использовать enumerate:

    for i, v in enumerate(z):
        if v > max_v:
            max_v = v
            max_i = i

    Вариант без цикла:

    max_i = z.index(max(z))
    Ответ написан
    Комментировать
  • Как проставить кавычки массово в Excel или строках txt?

    @AlexP11223
    Notepad++ regex

    Find: (^.+$)
    Replace: "(\1)"
    Ответ написан
    Комментировать
  • Как написать простую программу вычисления квадратных уравнений на Python?

    Считать квадратное уравнение в целых числах -- это так необычно.
    Ответ написан
    Комментировать
  • В свете запретов, почему не использовать шифрование на уровне HTTP-заголовков?

    Stdit
    @Stdit
    Потому что до уровня HTTP-протокола фильтры, вроде как, ещё не добрались. Сайты блокируются по айпи и по домену. Блокировку по домену можно легко обойти, прописав неблокирующий DNS, а ещё лучше поставив DNSCrypt. А блокировку по айпи — через VPN.
    Ответ написан
    1 комментарий