Задать вопрос
  • Из-за чего все коды в Pycharm начали запускаться во весь экран?

    @Soul1
    запускаются во весь экран
    Вы имеете в виду, что консоль на весь экран масштабируется? Попробуйте уменьшить высоту консоли, наведите курсор на её границу (выделил область на скрине) и потяните вниз
    spoiler
    6382279f5990c840771636.png
    Ответ написан
    Комментировать
  • Начинаю осваивать котлин. Каким образом можно подсчитать количество вхождений подстроки в строку??

    @Soul1
    Если хочется именно через регулярку:
    Regex(substring).findAll(string).count()
    Либо без регулярки:
    string.split(substring).lastIndex
    Ответ написан
    Комментировать
  • Оптимизация записи в excel как сделать?

    @Soul1
    А зачем вы сохраняете книгу на каждой итерации цикла for? Попробуйте поставить сохранение после цикла, может даст прибавку к скорости.
    Ответ написан
    Комментировать
  • Как получить доступ авторизации для своего десктоп приложения в для Google Sheets?

    @Soul1 Автор вопроса
    Нашёл вот такой код, судя по всему не первой свежести. Сделал замены в коде:
    1) Заменил urllib2 на urllib.request
    2) В функции _get_auth_token заменил
    req = urllib2.Request(url, urllib.urlencode(params))
    на
    req = urllib.request.Request(url, email, password, service, source)
    3) В функции download заменил
    req = urllib2.Request(url_format % (spreadsheet.key, format, gid), headers=headers)
    на
    req = urllib.request.Request(url_format % (spreadsheet.key, format, gid), headers=headers)

    Код
    spoiler
    #!/usr/bin/python
    
    import openpyxl
    import xlrd
    import re, urllib, urllib.request
    
    
    class Spreadsheet(object):
        def __init__(self, key):
            super(Spreadsheet, self).__init__()
            self.key = key
    
    class Client(object):
        def __init__(self, email, password):
            super(Client, self).__init__()
            self.email = email
            self.password = password
    
        def _get_auth_token(self, email, password, source, service):
            url = "https://www.google.com/accounts/ClientLogin"
            params = {"Email": email,
                      "Passwd": password,
                      "service": service,
                      "accountType": "HOSTED_OR_GOOGLE",
                      "source": source}
            req = urllib.request.Request(url, email, password, service, source)
            return re.findall(r"Auth=(.*)", urllib.request.urlopen(req).read())[0]
    
        def get_auth_token(self):
            source = type(self).__name__
            return self._get_auth_token(self.email, self.password, source, service="wise")
    
        def download(self, spreadsheet, gid=0, format="xls"):
            url_format = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=%s&exportFormat=%s&gid=%i"
            headers = { "Authorization": "GoogleLogin auth=" + self.get_auth_token(), "GData-Version": "3.0" }
            req = urllib.request.Request(url_format % (spreadsheet.key, format, gid), headers=headers)
            return urllib.request.urlopen(req)
    
    if __name__ == "__main__":
        email = ".....@gmail.com" # (your email here)
        password = '.....'
        spreadsheet_id = "...." # (spreadsheet id here)
        # Create client and spreadsheet objects
        gs = Client(email, password)
        ss = Spreadsheet(spreadsheet_id) # Request a file-like object containing the spreadsheet's contents
        downloaded_spreadsheet = gs.download(ss)
    
        book = xlrd.open_workbook(file_contents=downloaded_spreadsheet.read(), formatting_info=True)
        file = open('path/to/file.xlsx', 'rb')
        wb = openpyxl.load_workbook(filename = file)

    Но при запуске выдаёт такую ошибку:
    for key, value in headers.items():
    AttributeError: 'str' object has no attribute 'items'

    Подскажите, может я неправильно замену прописал или ещё что-то нужно изменить/добавить?
    Ответ написан
    Комментировать