Ответы пользователя по тегу Python
  • Как сделать дату одним токеном?

    @abcd0x00
    Сначала делишь всё по пробелам, а потом эти лексемы проходишь и склеиваешь обратно в даты части, которые можно в них склеить.
    Ответ написан
    Комментировать
  • Python. Как из списка сделать многомерный массив?

    @abcd0x00
    >>> p = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> it = iter(p)
    >>> list(map(list, zip(it, it, it)))
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    >>>
    Ответ написан
    Комментировать
  • Как сделать генератор случайных ,четных ,натуральных чисел?

    @abcd0x00
    >>> import random
    >>> 
    >>> def g(start=1, end=1000000):
    ...     n = random.randint(start, end - 1)
    ...     return (n % 2 == 0 and n) or n + 1
    ... 
    >>> [g() for _ in range(10)]
    [841196, 137368, 240392, 14588, 431038, 737926, 203080, 678028, 694386, 154716]
    >>> 
    >>> [g(5, 20) for _ in range(10)]
    [14, 10, 8, 8, 18, 8, 6, 14, 12, 12]
    >>> [g(5, 20) for _ in range(10)]
    [10, 16, 18, 6, 18, 8, 10, 8, 8, 14]
    >>>
    >>> [g(6, 20) for _ in range(10)]
    [18, 6, 18, 6, 20, 8, 10, 16, 12, 16]
    >>>
    Ответ написан
    Комментировать
  • Смещение даты 2000?

    @abcd0x00
    >>> import datetime
    >>> 
    >>> date_time = datetime.datetime.now()
    >>> date_time_2000 = date_time.replace(year=date_time.year + 2000)
    >>> date_time.strftime("%Y-%m-%d %H:%M:%S")
    '2017-02-26 17:55:44'
    >>> date_time_2000.strftime("%Y-%m-%d %H:%M:%S")
    '4017-02-26 17:55:44'
    >>>
    Ответ написан
    Комментировать
  • Почему dict при каждом вызове показывает разный порядок элементов?

    @abcd0x00
    Потому что там нет порядка. Словарь характеризуется скоростью поиска значений по ключам. При любом количестве пар ключ-значение в словаре поиск значения стремится к O(1).
    Ответ написан
    Комментировать
  • Можно ли в python читать файл через строку?

    @abcd0x00
    import itertools
    
    with open('file.txt', encoding='utf-8') as fin:
        for line in itertools.islice(fin, 0, None, 2):
            print(line, end='')
    Ответ написан
  • Как исправить это регулярное выражение?

    @abcd0x00
    Используй lxml.html для разбора html.

    >>> import lxml.html
    >>> 
    >>> s = """<input type="hidden" name="Sample" value="0">"""
    >>> 
    >>> node = lxml.html.fromstring(s)
    >>> node
    <InputElement b74340ec name='Sample' type='hidden'>
    >>> node.attrib
    {'type': 'hidden', 'name': 'Sample', 'value': '0'}
    >>>


    Если же собрался использовать регулярки, то надо сделать в два этапа: 1) сначала выделить все нужные теги, которые будешь разбирать; 2) затем из выбранных тегов уже выбирать атрибуты. Возможно, понадобятся две регулярки (одна для выбора тегов, другая для выбора атрибутов), но это неважно. Главное, что у тебя разные задачи не должны сливаться в одной регулярке, так как это не только её усложнит (невозможно будет читать), но и приведёт к невидимым ошибкам, из-за которых оно в каких-то случаях будет неправильно разбираться и ты это сразу не заметишь.
    Ответ написан
    1 комментарий
  • Изучение "вскользь" теории + практика или погружение в теорию?

    @abcd0x00
    Начал изучать Python, следующим на очереди Django.

    Без изучения питона в джанго лучше не лезть, иначе будешь элементарные однострочные вещи писать в виде небоскрёбов по десять строк или вместо библиотечных функций, про которые ты не знаешь, писать свои велосипеды. Питон можно поверхностно изучать тогда, когда знаешь глубоко какой-нибудь похожий на него по своему устройству язык (Ruby, Perl).
    Ответ написан
    Комментировать
  • Как парсить большой текст на Python?

    @abcd0x00
    Что посоветуете для более-менее быстрого парсинга такого файла?

    Ты должен перегнать это в базу данных, у которой есть средства для SQL запросов. Это сейчас тебе надо найти вот это вот по этому, а завтра понадобится найти совсем другое по совсем другому. И для всего этого (всех возможных вариантов) подходит именно гибкий язык запросов. Поэтому тебе нужно написать перегонщик исходных данных в хорошую базу данных, который ты потом привяжешь к скрипту, который проверяет, изменился ли этот файл с исходными данными, чтобы автоматически составить новую базу. И для того, чтобы его написать, нужно сначала подготовить исходный файл (удалить лишние пробелы), потом проанализировать его на отдельные записи (это лексический анализатор нужно сделать), а потом этот поток лексем сохранить уже в виде записей в таблице базы данных. Но в базе данных у тебя уже должно быть всё по уму сделано, чтобы любые поиски выполнять можно было и ничего не путалось. Возможно даже, что тебе нужно будет сделать разные таблицы (для русского и для английского и связать их). Работы немало.

    Как оказалось, важное замечание: этот файл мы не сами редактируем, его присылает другая организация (государственная) изменить его формат невозможно.

    А ты вызвался упростить работу? Зря, всё равно не оценят. Будешь бесплатно работать за грамоту и похлопывание по плечу.
    Если есть возможность, вообще в такие вещи не лезь, пусть ищут хоть руками, хоть ногами. Говори, что так и должно быть, а сам занимайся полезными вещами, чтобы не деградировать.
    Ответ написан
    Комментировать
  • Python - кодировка cp866?

    @abcd0x00
    >>> "’®ав ЋЎ¦®аЄ  Љ®а®«м ‹Ґў".encode('cp1251').decode('cp866')
    'Торт Обжорк  Король Лев'
    >>>
    Ответ написан
    Комментировать
  • Как разбить текст на предложения, не используя регулярные выражения?

    @abcd0x00
    Казалось бы легко -

    Это только кажется, и дело тут не в том, как определить строчную или прописную букву. Дело в алгоритме. Это задача относится к написанию лексического анализатора, а пишутся они через конечные автоматы.
    wiki. конечный автомат (пример)
    Ответ написан
    Комментировать
  • Как перекодировать строку в Python из utf-16 в utf-8?

    @abcd0x00
    >>> s = 'абвг'.encode('utf-16be')
    >>> s
    b'\x040\x041\x042\x043'
    >>> 
    >>> out = s.decode('utf-16be').encode('utf-8')
    >>> out
    b'\xd0\xb0\xd0\xb1\xd0\xb2\xd0\xb3'
    >>> 
    >>> out.decode('utf-8')
    'абвг'
    >>>
    Ответ написан
    Комментировать
  • Как разобрать такую строку? Регулярные выражения?

    @abcd0x00
    >>> import re
    >>> 
    >>> s = 'Some random string , Round A 1 day - Trip'
    >>> 
    >>> match = re.search(r'^(.+) , (\S+ \S+) (.+) - (.+)$', s)
    >>> match.groups()
    ('Some random string', 'Round A', '1 day', 'Trip')
    >>>
    Ответ написан
    1 комментарий
  • Как написать цикл для прочтения всего файла по 8 байт на Pythone?

    @abcd0x00
    >>> def read_blocks(fname, block_size):
    ...     with open(fname, 'rb') as fin:
    ...         while True:
    ...             data = fin.read(block_size)
    ...             if data:
    ...                 yield data
    ...             else:
    ...                 break
    ... 
    >>> out = read_blocks('/etc/passwd', 8)
    >>> 
    >>> list(out)[:5]
    [b'root:x:0', b':0:root:', b'/root:/b', b'in/bash\n', b'bin:x:1:']
    >>> 
    >>> out = read_blocks('/etc/passwd', 10)
    >>> 
    >>> list(out)[:5]
    [b'root:x:0:0', b':root:/roo', b't:/bin/bas', b'h\nbin:x:1:', b'1:bin:/bin']
    >>>
    Ответ написан
    Комментировать
  • Как узнать подробнее о методах/функциях?

    @abcd0x00
    В Python есть прекрасная функция dir(). Она показывает, какие методы/функции можно преминить к нашему объекту.

    Нет, она показывает только имена, а чьи это имена, функций или переменных, - это неизвестно. Поэтому максимум, что используется в питоне, - это функция help(), применяемая к объекту. Но даже она не даёт полного представления об объекте, так как там часто всё не так уж и подробно описано, а в PyQt так вообще все аргументы методов пишутся с троеточиями. В конечном итоге ты привыкаешь читать только основную документацию, потому что встроенная неинформативна.

    Так же и в Go: есть документация - ею и пользуйся.
    golang.org/ref/spec
    golang.org/pkg
    Ответ написан
    Комментировать
  • Как запускать .py в директории Х определенной версией Python?

    @abcd0x00
    Все файлы .py одинаковые, менять заголовок не хочется.

    Даже если все файлы одинаковые, не стоит их запускать на разных версиях. Для каждой версии (имеются в виду 2 или 3) должен быть свой вариант. Это относится к глубинным различиям в этих версиях. Выглядеть код может одинаково, а работать совсем по-разному.
    Ответ написан
    Комментировать
  • Почему при обходе словаря в Python я получаю кортеж?

    @abcd0x00
    >>> dicts = {'0000000876': {'FullName': 'Сисин Алексей Александрович',
    ...                         'Department': 'Фармацевтический склад'},
    ...          '0000000152': {'FullName': 'Возягин Павел Константинович',
    ...                         'Department': 'Инженерный отдел'},
    ...          '0000000103': {'FullName': 'Зайцев Александр Александрович',
    ...                         'Department': 'Коммерческая дирекция'},
    ...          '0000001015': {'FullName': 'Кочетов Николай Васильевич',
    ...                         'Department': 'Транспортно-хозяйственный отдел'}}
    >>> 
    >>> for d in dicts.values():
    ...     print(d['FullName'])
    ... 
    Кочетов Николай Васильевич
    Зайцев Александр Александрович
    Сисин Алексей Александрович
    Возягин Павел Константинович
    >>>
    Ответ написан
    Комментировать
  • Get item by value?

    @abcd0x00
    >>> lst = [{'n': 0}, {'n': 1}]
    >>> 
    >>> next(filter(lambda i: i['n'] == 1, lst), None)
    {'n': 1}
    >>> next(filter(lambda i: i['n'] == 5, lst), None)
    >>>


    >>> lst = [{'n': 0}, {'n': 1}]
    >>> 
    >>> next((i for i in lst if i['n'] == 1), None)
    {'n': 1}
    >>> next((i for i in lst if i['n'] == 5), None)
    >>>
    Ответ написан
    Комментировать
  • Почему при компиляции и запуска кода ничего не выводит на экран?

    @abcd0x00
    От этой формы потом надо наследоваться в своём приложении, чтобы оно приобрело вид этой формы. Саму её запускать не надо. Почитай какие-нибудь туториалы для начала.
    Ответ написан
    Комментировать
  • Как в Python сгенерировать наименование файла определенного формата?

    @abcd0x00
    >>> import string
    >>> import random
    >>> 
    >>> def gen_random_chars(nrandchars):
    ...     alpha = string.ascii_uppercase + string.digits
    ...     chars = ''.join(random.choice(alpha) for _ in range(nrandchars))
    ...     return chars
    ... 
    >>> def gen_name(prefix):
    ...     return prefix + gen_random_chars(4)
    ... 
    >>> for i in range(10):
    ...     gen_name('abcd')
    ... 
    'abcdZ5VK'
    'abcdT8V4'
    'abcdJJCN'
    'abcd92IQ'
    'abcdW0QP'
    'abcdNQLB'
    'abcdQ1WS'
    'abcdF8SG'
    'abcd7WB1'
    'abcdA3X3'
    >>>
    Ответ написан
    Комментировать