Ответы пользователя по тегу Python
  • Что нужно питонисту, чтобы его приняли на работу?

    @iSergios
    Python-разработчик
    Если говорить про именно позицию мидла:
    - уверенное владение основами языка + не сильно глубокое, но понимание его подкапотностей (скажем, не просто знать, какие есть типы данных, но еще и как они работают и почему + сложность операций с ними);
    - системы контроля версий (git норм)
    - основные паттерны (особенно те, которые реализованы в языке нативно);
    - если хотим в веб-разработку, то, как правильно указали выше - знать, как работает интернет, что такое http, rest и пр. Не помешает самое общее понимание того же TCP/IP;
    - SQL хотябы на базовом уровне. Если мы говорим о веб-разработке, то мидлу следует понимать, во что выливаются его (и не только) ORM-конструкции;
    - для веба - понимание архитектуры веб-приложений и принципов работы веб-серверов;
    - в 2020 следует знать, хотя бы базово, что такое контейнеризация, уметь работать с docker;
    - понимание, что такое CI/CD, и как с ним жить будет несомненным плюсом (многие считают это за обязательное требование, как по мне - не горит);

    Особняком стоит то, что ТС назвал "умение писать чистый код". Это для мидла мастхев, но это полный синоним фразы "опыт работы в команде над коммерческими проектами". Писать код много можно и одному. Но научиться писать чистый понятный код в одного крайне и крайне тяжело. К сожалению.

    Совет: автор, если считаешь себя хоть сколько-нибудь готовым, не гадай: просто сходи на пару собесов на мидловую позицию. Бери тестовые, решай, получай фидбек. На собесах придет довольно хорошее понимание, что хочет реально рынок сегодня. Не бойся ходить на заведомо провальные собесы, никто в ЧС не занесет :) Многие компании прекрасно тебя "пересобесят" через полгода вне зависимости от того, насколько плохо прошло предыдущее собеседование.
    Ответ написан
    Комментировать
  • Почему не видит файлы .json в папке c .ipynb?

    @iSergios
    Python-разработчик
    что гуглить?

    Как определяется путь к директории, из которой запущен скрипт?
    Тот же вопрос, но при наличии в директории __init__.py?
    Ответ написан
  • Как из скрипта запустить другие скрипты поочередно и ждать их выполнения?

    @iSergios
    Python-разработчик
    А в чем, собственно, проблема? Оформляем в каждом скрипте, который хотим запустить, функцию main, например, которая и будет отвечать за запуск всей логики и что-то там возвращать. Потом импортируем все эти модули и запускаем поочередно с ожидаем возврата из каждой функции.
    Ответ написан
    Комментировать
  • Ошибка "vk" is not defined,что делать?

    @iSergios
    Python-разработчик
    У Вас объявление переменной vk закомментировано на 4 строке.
    Ответ написан
    Комментировать
  • Какой выбрать Python фреймворк для системы парсинга сайтов?

    @iSergios
    Python-разработчик
    Мне кажется, Вы не разобрались в теме, начните сначала.
    Ключевые особенности системы, которые усложняют выбор фреймворка

    Ни одна из этих особенностей не усложняет выбор фреймворка, ибо ни одна из них не охватывается и не должна охватываться его функционалом.

    Любой скраппинг-фреймворк, это удочка. Рыбака Вам самому писать. И не удочка должна решать, как часто и с какой периодичностью запускаться, где хранить наскрапленное и все остальное. Для целей скраппинга у Вас должен быть всего один вопрос: надо парсить JS или нет. Если нет - Ваш выбор BeautifulSoup, ибо очень быстрый. Если да - посмотрите в сторону Selenium.
    Ответ написан
    4 комментария
  • Как можно вычленить данные из текста?

    @iSergios
    Python-разработчик
    Смотря какой язык текста. Если в языке падежи не влияют на словообразование (английский), то можно даже простым перебором, если тексты не сложные. Если же влияют (русский) - регулярными выражениями.
    Ответ написан
    Комментировать
  • Потоки в python?

    @iSergios
    Python-разработчик
    Копайте в сторону threading. Для запуска функции в потоке в самом простейшем варианте можно использовать декоратор. Например:
    import threading
    
    def thread(func):  # Собственно, декоратор
     def wrapper(*args, **kwargs):
      current_thread = threading.Thread(target=func, args=args, kwargs=kwargs)
      current_thread.start()
     return wrapper
        
    @thread  # Оборачиваем
    def function():
     '''
     И вот тут код функции, которая всякий раз при вызове 
     будет запускаться в отдельном потоке.
     '''


    Но помните главное. При попытке обратиться к sqlite-базе из потока, отличного от того, в котором был создан коннект с ней, она будет ругаться и бросать exception.
    Ответ написан
    Комментировать
  • Как создать программу ставящую пароль на папку?

    @iSergios
    Python-разработчик
    Единственный способ закрывать через питон папку, это играть с правами доступа, причем Ваша программа должна работать от имени администратора. Интегрированного рабочего решения при этом не получится. Как, в прочем, и кроссплатформенного.
    Ответ написан
    Комментировать
  • Как поделить строку в переменные?

    @iSergios
    Python-разработчик
    string = 'send abcde 0.2'
    splitted_string = string.split()
    send1 = splitted_string[1]
    send2 = splitted_string[2]
    Ответ написан
    Комментировать
  • Почему поток запускается только 1 раз?

    @iSergios
    Python-разработчик
    Ну во-первых, цикл у вас запускается не в отдельном потоке, а в том же потоке, что и окно. Это замечательно видно по тому, что окно фризится, пока цикл работает (не двигается, не ресайзится). То, что вы унаследовались от Thread еще не означает, что все, что вы запустите, будет работать в отдельном потоке. Пока у вас все в один поток идет. Оттуда, к слову, и ошибка - метод start() может быть вызван только один раз на один поток.

    Простейший способ решить вашу задачу таков:
    from tkinter import *
    import time
    import threading
    
    
    class But_print():
        def __init__(self):
            self.but = Button(root)
            self.but["text"] = "to count"
            self.but.bind("<Button-1>", self.printer)
            self.but.pack()
    
        def thread(func):
            '''
            Это простейший декоратор. В него мы будем заворачивать 
            функции. Любая функция, завернутая этим декоратором, 
            будет выполнена в отдельном потоке.
            '''
            def wrapper(*args, **kwargs):
                current_thread = threading.Thread(
                    target=func, args=args, kwargs=kwargs)
                current_thread.start()
    
            return wrapper
    
        @thread  # собственно, применяем декоратор
        def printer(self, event):
            for i in range(10):
                print(10 - i - 1, "second")
                time.sleep(1)
    
    
    root = Tk()
    obj = But_print()
    root.mainloop()
    Ответ написан
    2 комментария
  • Как парсить большой текст на Python?

    @iSergios
    Python-разработчик
    Однако лягушки. Однако кактус.
    Решение настолько простое, что выкладывать готовый код как-то неприлично. Копайте в сторону метода .readline()
    Вообще же, чтобы не колоться в будущем и облегчить жизнь людям, я бы на вашем месте прислушался к советам по поводу БД. Сложить один раз в базу (можно sqlite), написать простенькую гуевину к бд для ввода, удаления и поиска. Работы на пол дня.
    Ответ написан
  • Как проверить одно временно 3 массива на пустоту с одним условием?

    @iSergios
    Python-разработчик
    a = [5, 7, 8]
    b = []
    c = [1, 2, 3]
    for c in (a,b,c):
    	if not c:
    		print('Есть пустой')
    Ответ написан
  • Какую выбрать книгу для изучения python?

    @iSergios
    Python-разработчик
    для старта Лутц. Без вариантов. Понимания будет намного больше:
    • "Изучаем Python"
    • "Программирование на Python" - 2 тома.

    Издание брать самое последнее. Когда я их читал, это было 4-е издание, 11-го года. Сейчас может уже и поновее есть.
    После:
    • Python. К вершинам мастерства. 2016 (Рамальо Лучано)

    Очень хорошо раскрываются аспекты написания именно нативного кода на Python.
    Ответ написан
    2 комментария
  • Меры предосторожности при парсинге на Python?

    @iSergios
    Python-разработчик
    1) Бдить временные интервалы, использовать разные IP и учетные записи (если возможно).
    2) Вероятно да. Однако никто Вам тут не ответит, все очень индивидуально. Разведка всегда проводится методом проб и ошибок.
    3) Да пожалуйста. За парсинг у нас не сажают. В худшем случае забанят. Решать Вам.
    4) В смысле?
    5) Откуда ж нам знать-то?
    Ответ написан
    Комментировать
  • Как оптимизировать мой код в Python?

    @iSergios
    Python-разработчик
    list_iter = []
    o = 1  # 'O' - одно из самых неудачных наименований переменной (в прочем, 'o' не многим лучше :))
    b = 2.7
    rou = 3
    for c in range(13):
    	list_iter.append(round((o+sum(list_iter))/(b-1), rou))
    >>> list_iter
    [0.588, 0.934, 1.484, 2.356, 3.742, 5.944, 9.44, 14.993, 23.812, 37.819, 60.066, 95.399, 151.516]
    Ответ написан
    3 комментария
  • Как лучше всего организовать сортировку по нескольким параметрам?

    @iSergios
    Python-разработчик
    Очень нетривиально Вы задумали с сортировкой. К слову словарь сортировку не поддерживает, поэтому я бы от него отказался (особенно с учетом того, что у Вас не пара переменных, а три).

    Для организации доступа к Вашим трем переменным никаких классов писать не надо, достаточно использовать namedtuple:
    >>> import collections
    >>> pair = collections.namedtuple('pair',['cat','dog','text'])

    Хранить "пары" лучше в списке:
    >>> vlist=[]
    >>> vlist.append(pair(900,2,'foo'))
    >>> vlist.append(pair(500,4,'bar'))
    >>> vlist.append(pair(300, 10, 'foobar'))
    >>> vlist
    [pair(cat=900, dog=2, text='foo'), pair(cat=500, dog=4, text='bar'), pair(cat=300, dog=10, text='foobar')]

    При этом будет поддерживаться сортировка по первому параметру (cat):
    >>> vlist.sort()
    >>> vlist
    [pair(cat=300, dog=10, text='foobar'), pair(cat=500, dog=4, text='bar'), pair(cat=900, dog=2, text='foo')]


    Заметьте, что на выходе мы будем иметь изменяемый список, что позволит Вам пересортировать его циклом так, как Вам заблагорассудится (скажем, если значения cat у соседних элементов равны, отсортировать их в обратном порядке по значению dog (я правильно понял, что Вы хотели именно это?)).
    Ответ написан
    Комментировать
  • Как просмотреть файл по url и записать в массив построчно?

    @iSergios
    Python-разработчик
    Гм, вообще-то искомый массив Вы получили уже на этой строке:
    res = urllib.request.urlopen('http://www.gfrag.co.za/README.txt').readlines()

    Можете в этом убедиться:
    >>> type(res)
    <class 'list'>
    >>> res[1]
    b'CONTENTS OF THIS FILE\n'

    что вас смущает?

    А так:
    infa.append(res)

    Вы поместили весь список res в первый элемент списка infa:
    >>> infa[0][1]
    b'CONTENTS OF THIS FILE\n'


    upd:

    Метод readlines() уже разбил ваш текст построчно. Таким образом, список res содержит строки байт из текста. Для начала вам надо перевести bytes в string с помощью метода decode().
    text_lines = [t.decode() for t in res]
    Далее уже работайте со списком как вам угодно. Можно, к примеру, получить список со всеми вхождениями этого вашего 'Drupal':
    excess_lines=[c for c in text_lines if 'Drupal' in c]

    или сформировать список без них:
    final_lines=[c for c in text_lines if 'Drupal' not in c]
    Ответ написан
    2 комментария
  • Python3 для опытного непитонщика, какую литературу выбрать?

    @iSergios
    Python-разработчик
    1. Python. К вершинам мастерства / Пер. с англ. Слинкин А. А. - М.: ДМК Пресс, 2016. - 768 с. (ISBN 978-5-97060-384-0)
    Интересно и хорошо написано, причем даже с переводом особых косяков нет. На примерах показано создание качественного Python-way кода. Мне понравилась, советую)

    2. Learning Python Design Patterns (Edition 2)
    Если Вы гуру в ООП, возможно, будет не так интересно. Для свежеприготовленного питониста очень полезно. В любом случае стоит полистать.
    Ответ написан
    1 комментарий
  • Как поместить файл в папку?

    @iSergios
    Python-разработчик
    Вы просто не добавили в путь вашу папку.

    import os, os.path
    #...
    directory = input('Куда вы хотите сохранить файл?:') 
    direc = os.mkdir(directory)#Создаём папку.
    #...
    f = open(os.path.join(directory, file + '.' + expans), 'a')#А папку в путь добавить?
    #...


    Также после создания папки можно сделать ее текущей методом
    os.chdir(directory)
    Однако я бы рекомендовал именно первый вариант.
    Ответ написан
    Комментировать