Ответы пользователя по тегу Python
  • Как получать "чистое" значение ячейки в Google Sheets?

    shabelski89
    @shabelski89
    engineer
    Вам нужно просто извлечь значение из JSON. если посмотреть внимательно то перед вами словарь, и нужный элемент получается по ключу.
    А то что Вы делаете описано подробно тут
    ну и в качестве домашнего задания разберитесь по строчкам кода
    response = {'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['102126989']]}
    response.get('values', 'No key values')
    [['102126989']]
    result = response.get('values', 'No key values')
    type(result)
    <class 'list'>
    result[0]
    ['102126989']
    result[0][0]
    '102126989'
    values = result[0][0]
    values
    '102126989'
    v = response['values'][0][0]
    v
    '102126989'
    import json
    from_google_sheet = '[{"majorDimension": "COLUMNS", "range": "guid!B2", "values": [["1"]]},{"majorDimension": "COLUMNS", "range": "guid!B2", "values": [["2"]]},{"majorDimension": "COLUMNS", "range": "guid!B2", "values": [["3"]]}]'
    json_from_google_sheet = json.loads(from_google_sheet)
    json_from_google_sheet
    [{'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['1']]}, {'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['2']]}, {'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['3']]}]
    type(json_from_google_sheet)
    <class 'list'>
    for values in json_from_google_sheet:
        print(values['values'][0][0])
        
    1
    2
    3
    Ответ написан
    Комментировать
  • Задержка для парсера сайта?

    shabelski89
    @shabelski89
    engineer
    есть вероятность что это JS даёт задержку , вот тут предлагаю элегантное решение

    from bs4 import BeautifulSoup
    from selenium import webdriver
    
    url = "http://legendas.tv/busca/walking%20dead%20s03e02"
    browser = webdriver.PhantomJS()
    browser.get(url)
    html = browser.page_source
    soup = BeautifulSoup(html, 'lxml')
    a = soup.find('section', 'wrapper')
    Ответ написан
    Комментировать
  • Как передать большой файл через сокеты на Python?

    shabelski89
    @shabelski89
    engineer
    Ответ написан
    Комментировать
  • Почему не работает print?

    shabelski89
    @shabelski89
    engineer
    не работает из-за непонимания того что Вы пытаетесь сделать.
    def talk():
      myEmi = input("")  # 1 присваиваем переменной myEmi значение введенное в input (это должно быть имя файла?) а кажется что сюда хотели вводить слово которое нужно искать в файле
      with open(f"BD1/{myEmi}.txt",  "r") as file:  # 2 открытие файла на чтение с именем из п.1
        if file.read() == myEmi:  # 3 file.read() читает содержимое file и возвращает содержимое ввиде строки, а дальше вы сравниваете с введенным словом, которое же почему и в имени файла?! Нужно использовать оператор IN вместо ==, а ещё правильнее прочитать файл так result = file.readlines() , что вернёт список строк и потом уже искать в списке элемент.
          print("Это слово есть!")
          talk()
        else:
          with open(f"BD1/{myEmi}.txt",  "w") as file:
            file.write(myEmi)
            talk()
    talk()   # 0 вызов функции talk()
    Ответ написан
    Комментировать
  • Зачем в python 3 функция format у строк?

    shabelski89
    @shabelski89
    engineer
    f нотация, появилась в питоне 3.6, в более ранних версиях был .format . Функицонально различий нет, есть различие в читаемости и лаконичности, я использую f нотацию.
    Ответ написан
    Комментировать
  • Как считать байт код файла?

    shabelski89
    @shabelski89
    engineer
    Зачем?
    Чтобы считать байт-код файла, его нужно скопилировать.
    пример питон файла
    root@vs1:~/project/test_nuitka# cat test_program.py
    def test():
        print('passed')
    
    if __name__ == "__main__":
        test()

    пример компиляции
    root@vs1:~/project/test_nuitka# python3
    Python 3.7.3 (default, Jan 22 2021, 20:04:44)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import py_compile
    >>> import os
    >>> os.listdir()
    ['include', 'share', 'test_program.py', 'lib64', 'bin', 'pyvenv.cfg', 'lib', 'ping.py']
    >>> py_compile.compile('test_program.py')
    '__pycache__/test_program.cpython-37.pyc'


    полученынй файл перемещаем куда угодно с помощью shutil.

    это если под байт-кодом понималось именно это, а ваш код показывает что нужно просто переместить файл с помощью shutil, вот примеры.
    Ответ написан
    Комментировать
  • Что не так со списком в python?

    shabelski89
    @shabelski89
    engineer
    1e - если используете with, то не нужно закрывать файл явно, при выходе из блока with сам это сделает.
    2е - метод read() возврщает строку, то есть answers - строка, убедиться можно сделав
    print(type(answer))
    уверен что answer[0] - это пробел
    3е - чтобы получить список, нужно вместо read() использовать readlines()
    Ответ написан
    1 комментарий
  • Очиститель файла после знака?

    shabelski89
    @shabelski89
    engineer
    class FileHandler:
        def __init__(self, filename):
            self.filename = filename
    
        def read(self):
            with open(self.filename, 'r', encoding='utf-8') as in_file, \
                    open(f'result_{self.filename}', 'w', encoding='utf-8') as out_file:
                for line in in_file:
                    if line:
                        out_line = self.__parse(line)
                        out_file.write(out_line)
                        out_file.write("\n")
    
        @staticmethod
        def __parse(line):
            result, *_ = line.split(":")
            return result
    
    
    if __name__ == "__main__":
        f = FileHandler(r'yot_file_name')
        f.read()
    Ответ написан
    Комментировать
  • Как записать текст в yaml файл в python?

    shabelski89
    @shabelski89
    engineer
    Ваш костыль не нужен освсем, есть готовые библиотеки - yaml
    Ваши данные должны быть списками и словарями питона, которые дампятся в yaml файл.
    Ответ написан
    Комментировать
  • Как правильно прочитать файл с сохранением типов данных?

    shabelski89
    @shabelski89
    engineer
    не нужно ничего писать, нужно файл с данными сохранять в валидный JSON.
    например:
    {"0": [1,2,3]}
    читаем
    import json
    
    with open('some_file.txt') as jfile:
        data = json.load(jfile)
        
    data
    {'0': [2, 4, 5]}
    data['0']
    [2, 4, 5]
    data['0'][0]
    2
    type(data['0'][0])
    <class 'int'>
    Ответ написан
    Комментировать
  • Как получить имя ячейки ttk.treeview как переменную при выборе её кликом?

    shabelski89
    @shabelski89
    engineer
    Нужно установить фокус и потом получать данные из выделенной строки TreeView, примерно так
    row_id = table.focus()
    print(row_id)
    if row_id:
        order_num = table.item(row_id)['values'][0]
        print(order_num)
    Ответ написан
    4 комментария
  • Я тут на быдлокодил, можно ли оптимизировать?

    shabelski89
    @shabelski89
    engineer
    Вот такое:
    if message.text in ['казино', 'Казино']:
    
    if message.text.lower() == "казино":


    или такое

    result = 'Выпало ' + str(a) + ', ты выиграл ' + str(bet) + ' мои поздравления!\nБанк ' + str(bank)
    result = f'Выпало {a}, ты выиграл {bet} - мои поздравления!\nБанк {bank}'


    ну и выше правильно написали, нечего тут "оптимизировать", кода пять строчек, логики тоже.
    Ответ написан
  • Как в базе данных SQLite3 к столбцу добавить autoincrement?

    shabelski89
    @shabelski89
    engineer
    Попробуйте так
    DELETE FROM animal;
    DELETE FROM sqlite_sequence WHERE name = 'animal';

    потому пробуйте
    cursor.execute("INSERT INTO animal (kind, species, birth_day, weight) VALUES (?, ?, ?, ?)", (kind1, species1, birth1, weight1))
    Ответ написан
    Комментировать
  • Как прикрепить фотографию к элементу списка в python?

    shabelski89
    @shabelski89
    engineer
    во-первых, не нужно называть переменные ключевыми словами ЯП (list )
    во-вторых, в данном случае лучше подходит структура данных - словарь
    from pprint import pprint
    cards = {'card_' + str(x): {'name': x, 'desc': x, 'photo': x} for x in range(1,22)}
    cards['card_21']['name'] = 'Мир'
    cards['card_21']['desc'] = 'Завершенность бла бла бла'
    cards['card_21']['photo'] = 'C:/Tools/tmp/card_21.png'
    pprint(cards)
    {'card_1': {'desc': 1, 'name': 1, 'photo': 1},
     'card_10': {'desc': 10, 'name': 10, 'photo': 10},
     'card_11': {'desc': 11, 'name': 11, 'photo': 11},
     'card_12': {'desc': 12, 'name': 12, 'photo': 12},
     'card_13': {'desc': 13, 'name': 13, 'photo': 13},
     'card_14': {'desc': 14, 'name': 14, 'photo': 14},
     'card_15': {'desc': 15, 'name': 15, 'photo': 15},
     'card_16': {'desc': 16, 'name': 16, 'photo': 16},
     'card_17': {'desc': 17, 'name': 17, 'photo': 17},
     'card_18': {'desc': 18, 'name': 18, 'photo': 18},
     'card_19': {'desc': 19, 'name': 19, 'photo': 19},
     'card_2': {'desc': 2, 'name': 2, 'photo': 2},
     'card_20': {'desc': 20, 'name': 20, 'photo': 20},
     'card_21': {'desc': 'Завершенность бла бла бла',
                 'name': 'Мир',
                 'photo': 'C:/Tools/tmp/card_21.png'},
     'card_3': {'desc': 3, 'name': 3, 'photo': 3},
     'card_4': {'desc': 4, 'name': 4, 'photo': 4},
     'card_5': {'desc': 5, 'name': 5, 'photo': 5},
     'card_6': {'desc': 6, 'name': 6, 'photo': 6},
     'card_7': {'desc': 7, 'name': 7, 'photo': 7},
     'card_8': {'desc': 8, 'name': 8, 'photo': 8},
     'card_9': {'desc': 9, 'name': 9, 'photo': 9}}

    как понятно из кода выше, в словарь добавляется ключ 'photo' и значение путь до файла.
    и дальше нужно передавать его через бота прочитав файл
    with open(cards['card_21']['photo'], "rb") as file:
        data = file.read()
    bot.send_photo(message.from_user.id, photo=data)

    но перед эти нужно написать функцию, которая будет принимать аргумент - ИД карты и подставлять его в open()
    Ответ написан
    Комментировать
  • Ошибка парсера на python. Что не так?

    shabelski89
    @shabelski89
    engineer
    Делов-то, за утренним кофе, остальное причешите сами:
    import requests
    from bs4 import BeautifulSoup as BS
    
    
    zodiacs = {
        "Овен": {"unicode": 9800, "latin": "Aries"},
        "Телец": {"unicode": 9801, "latin": "Taurus"},
        "Близнецы": {"unicode": 9802, "latin": "Gemini"},
        "Рак": {"unicode": 9803, "latin": "Cancer"},
        "Лев": {"unicode": 9804, "latin": "Leo"},
        "Дева": {"unicode": 9805, "latin": "Virgo"},
        "Весы": {"unicode": 9806, "latin": "Libra"},
        "Скорпион": {"unicode": 9807, "latin": "Scorpio"},
        "Змееносец": {"unicode": 9934, "latin": "Ophiuchus"},
        "Стрелец": {"unicode": 9808, "latin": "Sagittarius"},
        "Козерог": {"unicode": 9809, "latin": "Capricon"},
        "Водолей": {"unicode": 9810, "latin": "Aquarius"},
        "Рыбы": {"unicode": 9811, "latin": "Pisces"}
    }
    
    
    def get_horoscope(zodiac, URL='https://horoscopes.rambler.ru'):
        ASKURL = f'{URL}/{zodiac.lower()}/'
        HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0'}
        response = requests.get(ASKURL, headers=HEADERS)
        soup = BS(response.content, 'html.parser')
        item = soup.findAll('div', class_='_1E4Zo _3BLIa')[0]
        parse_result = item.find('p', class_='mtZOt').get_text(strip=True)
        return parse_result
    
    
    def get_info(zodiac):
        ask_horo = zodiacs[zodiac].get('latin')
        uni_horo = chr(zodiacs[zodiac].get('unicode'))
        result_horo = get_horoscope(ask_horo)
        return f'Результаты для знака зодиака {zodiac}- {ask_horo} - {uni_horo}\n{result_horo}'
    
    
    my_horo = get_info('Дева')
    print(my_horo)
    Ответ написан
    Комментировать
  • Python как сохранить в excel?

    shabelski89
    @shabelski89
    engineer
    вот тут на каждой итерации перезаписываешь DF
    data_svz = pd.DataFrame({'Бренд':[brand],'Модель':[model],'Описание':[description],'цена':[prise],'старя цена':[old_prise],'дата обновления':[date]})

    а нужно определить DF до цикла, а в цикле добавлять каждую строку
    id, brand, model, description, prise, old_prise, date = values
    data = {'Бренд':[brand],'Модель':[model],'Описание':[description],'цена':[prise],'старя цена':[old_prise],'дата обновления':[date]}
    data_svz = data_svz.append(data , ignore_index=True)

    и после выхода из цикла уже сохранять в ексель
    Ответ написан
    Комментировать
  • Как правильно перенести хеши php в python?

    shabelski89
    @shabelski89
    engineer
    import hashlib
    hash_pw = hashlib.md5("password".encode("utf-8")).hexdigest()
    print(hash_pw)
    #5f4dcc3b5aa765d61d8327deb882cf99
    Ответ написан
    Комментировать
  • Как подсчитать значения списка по ключу?

    shabelski89
    @shabelski89
    engineer
    С телефона, но должно работать)
    values_per_key = {}
    for d in all_tickets:
        for k, v in d.items():
            if k == "assigned_id":
                if not values_per_key.get(v):
                    values_per_key[v] = 1
                else:
                    values_per_key[v] += 1    
    print(values_per_key )
    Ответ написан
  • Не понимаю параметр метода createChatInviteLink в телеграм api?

    shabelski89
    @shabelski89
    engineer
    1620233753
    GMT: Wednesday, 5 May 2021 г., 16:55:53
    Your time zone: среда, 5 мая 2021 г., 19:55:53 GMT+03:00

    дальше просто
    >>> import time
    >>> time.time()
    1620233838.275895
    >>> current_time = int(time.time())
    >>> current_time
    1620233873
    >>> expire_date = current_time + 7 * 24 * 60 * 60
    # прибавили число равное 7 суткам в секундах
    >>> expire_date
    1620838673
    # время жизни = текущее время + 7дней
    Ответ написан
    Комментировать
  • Как сделать обратный таймер в телеграмм?

    shabelski89
    @shabelski89
    engineer
    Вот тут отвечал, а примере прямой и обратный отсчёт
    Ответ написан
    Комментировать