Задать вопрос
  • Не запускается программа на python?

    @devdb
    Что такое "fuction" в строке 34 html?
    function
    ;)
    Ответ написан
  • Как удобно читать PDF на PocketBook?

    @devdb
    Можно попробовать распознать PDF программой OCR типа Fine Reader, и затем конвертировать из формата DOC (или куда там будет записан результат) в нужный Вам формат.
    Ответ написан
    Комментировать
  • Как проверить пересечение SQL lite?

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


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

    @devdb
    Просто подстроки, но тогда найдешь не тэги, а именно подстроки:
    SELECT * FROM memes WHERE tags LIKE '%eng%' AND tags LIKE '%history%' AND tags LIKE '%anime%' ORDER BY id DESC LIMIT 20

    Если тэги разделить пробелами (" tag1 tag2 tag3 "), будет искать целые слова:
    SELECT * FROM memes WHERE tags LIKE '% eng %' AND tags LIKE '% history %' AND tags LIKE '% anime %' ORDER BY id DESC LIMIT 20

    Если есть пробелы внутри самих тэгов, то нужно их в тэге предварительно заменить каким-либо символом. Если пробелы в самих тэгах заменять "_" подчёркиванием, а не чем-то другим, то это немного усложнит запрос. Потому что "_" и "%" - это зарезервированные символы в операторе LIKE, поэтому, если эти символы встречаются в тэгах, - нужно будет добавить Escaping, например для тэгов "rus_eng" и "100%":
    SELECT * FROM memes WHERE tags LIKE '% rus\_eng %'  ESCAPE "\" AND tags LIKE '% 100\% %' ESCAPE "\" ORDER BY id DESC LIMIT 20

    (и не забудь, что сам символ обратного слэша вызывает проблемы в коде, так что может его лучше на что-то другое заменить, например на "/")

    Если тэги разделять запятыми (",tag1,tag2,tag3,"), можно искать подстроки типа ",tag1," :
    SELECT * FROM memes WHERE tags LIKE '%,eng,%' AND tags LIKE '%,history,%' AND tags LIKE '%,anime,%' ORDER BY id DESC LIMIT 20

    или так:
    SELECT * FROM memes WHERE instr(tags, ',eng,') AND instr(tags, ',history,') AND instr(tags, ',anime,') ORDER BY id DESC LIMIT 20

    или, если разделять пробелами (" tag1 tag2 tag3 "):
    SELECT * FROM memes WHERE instr(tags, ' eng ') AND instr(tags, ' history ') AND instr(tags, ' anime ') ORDER BY id DESC LIMIT 20


    Это всё для SQLite
    Если тебе для Microsoft или Oracle, то почитай про CONTAINS - он работает быстрее.

    Да, а если нужно пересечение по любым из тэгов - просто используй оператор OR вместо AND в вышеприведённом коде.
    Ответ написан
    Комментировать
  • Как преобразовать строку в имя переменной?

    @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
    Можно сделать музыкальную колонку-сувенир:
    https://www.youtube.com/watch?v=uM63nUaGgao&t=40
    https://www.youtube.com/watch?v=G081hD0nwWE
    https://www.youtube.com/results?search_query=music+hdd

    P.S. Лучше сделать бэкап самых важных данных - будет лежать десятилетия и еды не просить. Хотя неплохо засунуть его в USB-drive-чехол и периодически обновлять.
    Ответ написан
    Комментировать
  • Максимально бесшумная клавиатура?

    @devdb
    1) Клавиатуры с нарисованными клавишами.
    Обычно это ёмкостные клавиатуры (они же "сенсорные"), на старых бытовых компах вроде такие были. Потому что они самые дешёвые. Сейчас вроде тоже производятся, но чаще для всяких терминалов и подобных нужд. Может можно и для компьютеров найти.
    В принципе, мембранные тоже могут быть не с полноценными, а с нарисованными клавишами. Вроде на некоторых терминалах с напечатанными (нарисованными) клавишами есть бугорки - наверняка это мембранные. Резиновые клавиатуры тоже наверняка мембранные. Правда, такие клавиши неудобно нажимать при наборе многабукаф. Ёмкостные будут поудобнее.
    2) Использовать планшет или телефон с виртуальной клавиатурой. По сути та же ёмкостная, но настраивается.
    Ответ написан
  • Как удалить первую строку из строки?

    @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 языке - ты сможешь легко гуглить ответы на возникающие вопросы, смотреть примеры кода, спрашивать советы у тех, кто уже писал такие виджеты. Но можешь и усложнить себе жизнь, пойдя нестандартным путём...
    Ответ написан