• Питон ставит правила(сарказм) по f.read, что делать, не работает как должно. Есть возможности?

    @o5a
    Yooshyasha, в таком случае лучше и использовать json
    import json
    
    # данные в словаре
    data = {'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False}
    # переводим в строку, которую можно сохранять в файл
    text = json.dumps(data)
    # и из которой потом снова легко получаем наш полноценный словарь
    data = json.loads(text)
    print(data['username'])
    Написано
  • Питон ставит правила(сарказм) по f.read, что делать, не работает как должно. Есть возможности?

    @o5a
    1. Про то, почему не работает сама проверка, уже написали: read() нужно делать 1 раз, далее работать с этим считанным содержимым, а не снова пытаться делать read().

    2. Для разбора изначальной строки в виде словаря
    {'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False}
    лучше использовать не split, а модуль json (json.loads). Только и сохранять ее нужно тоже в json (json.dumps). Это в случае, если изначальный файл (before) вы сами и формируете. Очень похоже, что вы его и формируете, только не совсем корректно, видимо путем сохранения через str(данные в виде словаря)
    Если же изначальный файл полностью приходит извне и уже идет в таком "кривом" формате, то можно использовать ast.literal_eval
    import ast
    
    text = "{'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False}"
    data = ast.literal_eval(text)
    # напрямую запрашиваем значение по словарю
    print(data['username'])
    Написано
  • Как получить числовой массив из базы данных?

    @o5a
    Dmitry,
    Теперь на ось у я должен тоже передать массив данных из столбца Январь в таком виде [9124, 8652, 7592]
    Вот этот момент не понимаю как реализовать.

    Почему "столбца Январь"? Что за структура данных у вас такая странная? Столбцы год, месяц, станция - это ваши условно говоря столбцы признаков. А данные соответственно в своем столбце: если это какая-то сумма, то 'amount' например, или еще какой-то показатель. Это поле в SELECT запроса и выдавайте.
    Приведите лучше пример ваших данных в таблице (значения полей построчно) и что от запроса хотите для этих данных получить.
    Написано
  • Как автоматизировать запись в sqlite на Python, регулируя количество перезаписываемых переменных?

    @o5a
    DRON_161Rus, может зависеть от базы данных. Но например в Postgres update по сути создает новую запись, так что выгоды от попытки обновить только определенные поля, не будет.
    Написано
  • Как автоматизировать запись в sqlite на Python, регулируя количество перезаписываемых переменных?

    @o5a
    DRON_161Rus, Потому что в реальности если у вас есть какая-то форма параметров (по сути сама таблица или же ее представление, view, с измененным набором полей), то при ее изменении вы напрямую и записываете полностью все те поля, что в ней и были, не разбираясь, какое изменилось, а какое нет. Если значение не меняли, после update оно просто и будет заполнено старым значением.
    Это если вы планируете обновлять именно всю строку данных. Как пример: пользователь меняет свою страницу профиля: какие-то поля изменил, какие-то нет, но в таблицу профиля просто пишете все поля, не разбираясь, какие именно из них изменились.
    Если же вы хотите свою функцию использовать как некий универсальный обработчик, т.е. меняется какой-то параметр записи - вызывается эту UPD_in_db с изменением данного параметра, то в таком случае это как правило только 1 параметр и будет, а не какой-то нефиксированный список разных полей.
    Написано
  • Как получить числовой массив из базы данных?

    @o5a
    Dmitry, так понятнее. Насколько понял, хотите делать динамический запрос в зависимости от набора выбранных параметров. Тогда или как предложили выше, через pandas (сначала запросить весь массив данных, затем отфильтровать по этим параметрам), или же подставлять эти значения в сам запрос.
    cur.execute("select поле_значения from нужная_таблица where year = %s and month = %s and station = %), (year, month, station)).fetchall()

    Т.е. в запросе указываем названия столбцов в самой таблице БД и вторым параметром передаем соответствующие значения, которые выбрал пользователь. На выходе получаем вложенный список значений, удовлетворяющих данному фильтру. Который потом можете просто преобразовать в обычный список.
    Написано
  • Как получить числовой массив из базы данных?

    @o5a
    Не совсем понятно, чего именно хотите. Если просто обращаться к результатам запроса в БД по именам полей, то можно указать использовать курсор в виде словаря - для Pg https://www.psycopg.org/docs/extras.html#dictionar...
    cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    rows = cur.execute(...).fetchall()
    for row in rows:
        print(row['название_поля'])
    Написано
  • Почему получаю ошибку Security token is invalid для donation alerts?

    @o5a
    А откуда вот такое взялось?
    access_token = r[token]
    token - это же строка с самим токеном.

    Видимо предполагалось так?
    access_token = r['access_token']
    Написано
  • Как произвести сортировку в таблице SQLite3, после удаления записи?

    @o5a
    andishub, значит я правильно понял, для чего это потребовалось. Приведенный row_number как раз и решает вашу проблему. Она как раз и используется в SQL для вывода порядковой нумерации данных. Лучше делать через нее, не стоит городить "i+="
    Написано
  • Как произвести сортировку в таблице SQLite3, после удаления записи?

    @o5a
    В комментариях уже ответили верно, что первичный ключ сделан не для того, чтобы идти по порядку без пробелов. Его задача - поддержка уникальности. Но хотелось бы узнать, а для чего вообще захотели пересортировывать эти номера?
    Если была цель - выводить их как номера строк, то для этого в SQL есть отдельные функции, которые нумеруют строки по порядку (без пробелов), причем нумерация может быть разная в зависимости от поля сортировки.
    https://www.sqlitetutorial.net/sqlite-window-funct...
    Т.е. в вашем случае может быть так
    select id, name, 
    row_number() over(order by id) rn_1, -- порядковый номер при сортировке по id
    row_number() over(order by name) rn_2, -- но можно и при сортировке по именам
    from table_name

    Так что не нужно пытаться поддерживать порядок внутри самой таблицы, его получите при запросе данных из нее.
    Написано
  • Почему функция re.search не возвращает None при пустой строке и как придать False значение пустому выводу от re.search?

    @o5a
    Стоило сразу описать, что хотели своей регуляркой находить (что должно было удовлетворять условиям, а что нет). Как уже заметили тут в комментариях, в текущем виде она по большому счету не работает. Но и подсказать, как исправить, толком нельзя, т.к. даже не указали, что хотели сделать.
    Написано
  • Почему не работает render темплейта в docxtpl?

    @o5a
    utsiye, навскидку в целом все верно, должно работать. Попробуйте упростить код - сгенерируйте по своему шаблону и сразу сохраните. Возможно все-таки с тэгами накосячили.
    Написано
  • Как вернуть стартовое значение счетчика?

    @o5a
    giorgio85, Судя по постановке задачи, я бы вообще предположил, что требуется всего лишь этими методами класса изменять значение аттрибута self.number +/- 1 (с проверками диапазона), я не вижу, где по постановке задачи требуется возвращать список диапазона значений, как Вы это делаете.
    А для вывода значения объекта можно прописать методы __str__/__repr__
    Т.е. примерно так:
    class Counter:
        def __init__(self, number=5, lower_limit=3, upper_limit=10):
            self.number = number
            self.lower_limit = lower_limit
            self.upper_limit = upper_limit
    
        # выведет значение счетчика
        def __repr__(self):
            return str(self.number)
    
        def increase_count(self):
            # делаем проверки диапазона, и если удовлетворяет, увеличиваем self.number
    
        def decrease_count(self):
            # делаем проверки диапазона, и если удовлетворяет, уменьшаем self.number
    
    obj = Counter()
    obj.increase_count()
    print(obj) # выведет 6
    obj.decrease_count()
    print(obj) # выведет 5
    obj.decrease_count()
    obj.decrease_count()
    obj.decrease_count() # ругнется на выход за диапазон
    Написано
  • Ошибка " 'Sprite' object has no attribute 'x_end' ". Python Turtle. Как исправить?

    @o5a
    Max11pro, 1. Вы поместили инициализацию пути
    enemy1.set_move(-150, -50, -200, -50)
    врага внутрь цикла while, в результате после каждого шага они возвращаются назад, поэтому и "дергается". Это нужно делать до цикла.
    2. Координаты x врага наверное не такие предполагались? Больше похоже, что враги должны были пересекать путь игрока, т.е. там должно быть
    enemy1.set_move(-150, -50, 200, -50)
    Написано
  • Как вывести значения в API VK?

    @o5a
    Судя по описанию, автору нужна только первая запись данных (2 строки он сам формирует).
    Cipo, достаточно просто указать, что берется первая запись, соответственно
    for p in data1[0]:
    или надежнее указать срез, чтобы не ушло в ошибку, если запрос придет без результатов:
    for p in data1[:1]:
    Или же вообще без цикла, если всегда только 1 запись и нужна:
    p = data1[0]
    И как ответили в других комментариях, лучше изначально сразу задать конкретный день данных параметрами запроса.
    Написано
  • Почему код из книги Эрика Метиза "Изучаем Python" не работает?

    @o5a
    soremix, похоже зависит от версиии книги. Глянул какой-то выпуск перевода от 2017 года, и там все верно: отдельно изначальная функция (без 3-го параметра) и отдельно новая функция:
    def build_person(first_name, last_name, age=''):
        """Возвращает словарь с  информацией о человеке."""
        person = {'first': first_name, 'last': last_name}
        if age:
            person['age'] = age
        return person
    musician = build_person('jimi', 'hendrix', age=27)
    print(musician)

    Или же автор вопроса плохо читал и не заметил изменения в функции.
    Написано
  • Почему код не работает (задание из книги)?

    @o5a
    Алан Гибизов, судя по постановке задачи, ему как раз и нужно было делать
    for name in favorite_places.items():
    он просто лишних скобок наставил, в результате словарь превратился в множество.
    Написано
  • Почему не работает WHERE sql python?

    @o5a
    Vindicar, синтаксис в скобках нормальный. Ненормально тут было использовать одинарные кавычки, из-за этого и проблемы в том коде. Как уже заметили, или бэктики, или вообще без лишних символов, они тут не нужны.
    Написано
  • Мне надо чтобы в 1 переменной было время а выводило время +15сек, что я делаю не так?

    @o5a
    Foxford12, В модуле datetime есть datetime в котором есть now()
    А есть timedelta.
    Поэтому когда делаете
    from datetime import datetime
    то импортуется только datetime.datetime, но не timedelta.
    Так что или импортируйте модуль полностью и обращайтесь datetime.timedelta или импортируйте его дополнительно отдельно
    from datetime import timedelta
    
    timedelta(seconds=1)
  • Почему не вставляется массив в SQLite?

    @o5a
    executemany предполагает на вход вложенный список, т.е. не просто список значений полей для одной строки, а изменение сразу нескольких строк одним запросом.