Ответы пользователя по тегу Python
  • Не запускается программа на python?

    @devdb
    Что такое "fuction" в строке 34 html?
    function
    ;)
    Ответ написан
  • Как проверить пересечение SQL lite?

    @devdb
    SELECT * FROM memes WHERE tags LIKE "%anime%" OR tags LIKE "%eng%"


    При этом, если поле tags записи содержит "anime" или "eng", то такая запись будет выдана в списке найденных.
    А если не содержит - её в списке не будет. Это то пересечение, которое нужно?
    Подробнее про то как правильно оформить тэги в поле tags таблицы memes здесь
    Ответ написан
    Комментировать
  • Как преобразовать строку в имя переменной?

    @devdb
    sos_i_dont_know_programming = 42
    name = 'sos'
    name += '_i_dont_know_programming'

    print( eval(name) )
    #42
    Ответ написан
    Комментировать
  • Как использую BS4 извлечь текст внутри тега, который находится внтури найденного тега?

    @devdb
    html = '''<LTTextBoxHorizontal y0="677.457" y1="698.418" x0="47.208" x1="86.76" width="39.552" height="20.962" bbox="[47.208, 677.457, 86.76, 698.418]" index="3">
    <LTTextLineHorizontal y0="688.668" y1="698.418" x0="53.168" x1="86.76" width="33.592" height="9.75" bbox="[53.168, 688.668, 86.76, 698.418]" word_margin="0.1">Patient </LTTextLineHorizontal>
    <LTTextLineHorizontal y0="677.457" y1="687.207" x0="47.208" x1="86.76" width="39.552" height="9.75" bbox="[47.208, 677.457, 86.76, 687.207]" word_margin="0.1">Jonson </LTTextLineHorizontal>
    </LTTextBoxHorizontal>'''
    
    import bs4
    text = bs4.BeautifulSoup( html, 'html.parser' ).get_text()
    
    
    >> print( text )
    
    Patient
    Jonson
    
    >> text
    '\nPatient \nJonson \n'


    Вариант с Regexp, более быстрый и менее ресурсоёмкий:
    import re
    text = re.sub( r'<[^>]+>', '', html)
    Ответ написан
    Комментировать
  • Как поместить многострочный текст в одну ячейку в CSV?

    @devdb
    Отвечая на вопрос в заголовке:
    Закодировать текст так, чтобы в нём не осталось недопустимых символов, т.е. символов, которые используются в самом формате хранения как управляющие символы. Можно применить percent-encodig, можно JSON, можно base64. И возможно лучше сразу сохранять данные в БД или Excel таблицу.

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

    s = "aaa\n\nbbb\tccc"  # Строка с запрещёнными символами
    rs = repr(s)  # "Закодированная" строка: "'aaa\\n\\nbbb\\tccc'"
    
    # Чтобы раскодировать:
    import ast
    decoded = ast.literal_eval(rs)
    
    
    >> print(s)
    aaa
    
    bbb     ccc
    
    >> print(rs)
    'aaa\n\nbbb\tccc'
    
    >> print(decoded)
    aaa
    
    bbb     ccc
    Ответ написан
    Комментировать
  • Как удалить все символы сохраняя порядок?

    @devdb
    alphabet = '9876543210 \n\r/'
    Ответ написан
    Комментировать
  • Кто поможет исправить работу алгоритма?

    @devdb
    data='234567890'  # str / bytes / bytearray / list / tuple
    for start in range(0,len(data)):
      for finish in range (start,len(data)):
        print( data[ start : finish+1 ], '\t\t start:',start,'   finish:',finish)

    Output
    2                start: 0    finish: 0
    23               start: 0    finish: 1
    234              start: 0    finish: 2
    2345             start: 0    finish: 3
    23456            start: 0    finish: 4
    234567           start: 0    finish: 5
    2345678                  start: 0    finish: 6
    23456789                 start: 0    finish: 7
    234567890                start: 0    finish: 8
    3                start: 1    finish: 1
    34               start: 1    finish: 2
    345              start: 1    finish: 3
    3456             start: 1    finish: 4
    34567            start: 1    finish: 5
    345678           start: 1    finish: 6
    3456789                  start: 1    finish: 7
    34567890                 start: 1    finish: 8
    4                start: 2    finish: 2
    45               start: 2    finish: 3
    456              start: 2    finish: 4
    4567             start: 2    finish: 5
    45678            start: 2    finish: 6
    456789           start: 2    finish: 7
    4567890                  start: 2    finish: 8
    5                start: 3    finish: 3
    56               start: 3    finish: 4
    567              start: 3    finish: 5
    5678             start: 3    finish: 6
    56789            start: 3    finish: 7
    567890           start: 3    finish: 8
    6                start: 4    finish: 4
    67               start: 4    finish: 5
    678              start: 4    finish: 6
    6789             start: 4    finish: 7
    67890            start: 4    finish: 8
    7                start: 5    finish: 5
    78               start: 5    finish: 6
    789              start: 5    finish: 7
    7890             start: 5    finish: 8
    8                start: 6    finish: 6
    89               start: 6    finish: 7
    890              start: 6    finish: 8
    9                start: 7    finish: 7
    90               start: 7    finish: 8
    0                start: 8    finish: 8

    Ответ написан
  • Как найти ссылку в строке полностью?

    @devdb
    Как вариант (не единственно возможное решение):
    pattern = r'(<a rel=")(.+?)(">)'
    splitted = re.split( pattern, html_str ) 
    # splitted == [ '<html>...', '<a rel="', 'http://site.com/image1.jpg', '">', '<div>...', '<a rel="', 'http://site.com/image2.jpg', '">', ... ]
    urls = splitted[2::4]
    # urls == ['http://site.com/image1.jpg', 'http://site.com/image2.jpg', ... ]


    Далее проходите по splitted в цикле с шагом 4, и, если image не удовлетворяет условию, удаляете текущие [ '<a rel="', 'http://site.com/image2.jpg', '">' ] из списка splitted или заменяете их на что-то (например, на "название ссылки").

    А после чистки:
    cleaned_html_str = ''.join(splitted)
    Ответ написан
    Комментировать
  • Как удалить первую строку из строки?

    @devdb
    Корректно сделать так (str.splitlines):
    s=' a b \r\n c d \n e f '
    result = '\n'.join(s.splitlines()[1:])
    Правда, переносы строк изменятся, если они были не '\n', но зато всё будет работать чётко и по лучшим рецептам Unicode.

    Можно ещё с regexp:
    import re
    s=' a b \r\n c d \r e f '
    template = r"[^\n\r]*(\r\n|\n\r|[\n\r])?"
    result = re.sub( template, "", s, count=1)
    Здесь после первой строки всё сохранится как было неприкосновенным, даже нестандартные переводы строк (которые не '\n').

    Regex хорош тем, что всё можно настраивать как самим хочется. Выше приведён пример для часто встречающихся переводов строк, а вот для всех (надеюсь) вариантов переводов строк, включая даже нуль-символ, который тоже иногда может использоваться для разделения строк (и стандартная splitlines уже с таким не справится, а regex может):
    import re
    s=' a b \u0000 c d \n e f '
    template = r"[^\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029\x00]*(\r\n|\n\r|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029\x00])?"
    result = re.sub( template, "", s, count=1)


    Или так, через re.split:
    import re
    s=' a b \r\n c d \n e f '
    template = r"\r\n|\n\r|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029\x00]"
    result = "".join( re.split( template, s, maxsplit=1 )[1:] )
    Ответ написан
    Комментировать
  • Можно ли писать виджеты для вк на Python?

    @devdb
    Есть client-side реализации Python, например Brython. Вполне может быть, что на нём (или других подобных) можно написать виджет. Но, IMHO, тебе будет проще писать на предназначенном для данного API языке - ты сможешь легко гуглить ответы на возникающие вопросы, смотреть примеры кода, спрашивать советы у тех, кто уже писал такие виджеты. Но можешь и усложнить себе жизнь, пойдя нестандартным путём...
    Ответ написан