Ответы пользователя по тегу Python
  • Как получить все url get запросов с сайта?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Url всегда нормальный
    spoiler

    https://api.photo.2gis.com/2.0/photo/get?key=gYu1s9N1wP&object_id=70000001041515922&object_type=branch&locale=ru_RU&status=active&sort_by=position&album_code=common&preview_size=600x600,300x300,100x100&size=4&page=1


    Меняй 70000001041515922 на другие номера и получишь то что тебе надо
    Список id есть на страницу и зашит в url организации но получить этот список ты стандартным requests не сможешь потому как станица генерируется js
    Ответ написан
  • Как найти нужное значение соответствующее одному из вариантов регулярного выражения?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Необходимо проверить/найти

    Так найти или проверить ?

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

    В общем разбей задачу на части а потом уже городи всякие однострочники

    Исходные данные

    import re
    source_name = '34234 334234'
    
    pat_0 = r'\d+'
    pat_1 = r'[А-В]Т\-[А-В]Ш\-[А-В]Д'
    pat_2 = r'[А-В]Т\-[А-В]Ш'
    pat_3 = r'[А-В]\-[А-В]Ш'
    pat_4 = r'\s[А-В]\-'
    pat_5 = r'\/[А-В]\-'
    patterns = [pat_0, pat_1, pat_2, pat_3, pat_4, pat_5]


    # Проверить
    found = False
    for p in patterns:
        if re.search(p, source_name):
            found = True
            break;
    if found:
        print("Yes")
    else:
        print("No")
    
    # Найти
    for f in list(map(lambda p: re.findall(p, source_name),  patterns)):
        for v in [i for i in f if f]:
            print(v)
    Ответ написан
  • Как установить новую библиотеку в pycharm?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    устанавливайте в терминале и будет вам счастье
    ide своя тема и своя специфика и может и не для этого она с учетом последних обновлений
    пайчарм.

    Очередная версия транскрипции pycharm
    Ответ написан
  • Как использовать python requests с прокси через tor?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Как

    Простым способом никак

    Если кратко то прокси это точка выхода и если она сама по себе на заточена на использование тора завернуть трафик в тор не получится. Это возможно только в том случае если проски твои как собственно и машина на которой это все хозяйство крутится но тогда тебе нужно поднимать ноду

    А к чему такой головняк ?
    Если ты хочешь скрыть использование тора то используй tor over vpn
    Самый простой джентельменский набор это установка на виртуалку whonix а на host системе включай vpn. Внутри whonix используй прокски чтобы скрыть использование tor для сайта который будешь парсить.... или что ты там удумал
    Ответ написан
    Комментировать
  • Можете оценить код python?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Точно не помню что там уже передается но думаю что можно заменить вот это
    view_folder(arg_parser.path, arg_parser.format, arg_parser.img, arg_parser.dell, arg_parser.dir, arg_parser.del_all)

    на
    view_folder(**arg_parser)
    Вот это можно сократить со значением на умолчанию - зачем зря в клавиатуру тыкать
    confirm = input('\nDelete this files? press: y/n: ')
    
    if not confirm:
    	del_file(difference)
    	sys.exit('Complete\n')
    elif confirm == 'n':
    	sys.exit('Cancelled\n')
    else:
    	print('Invalid input')

    Зачем здесь бесконечный цикл и собственно зачем тут вложенные функции
    #Если файл в папке raw_file уже существует, создать копию	
    i = 1
    while True:
    	if not pathlib.Path(file.parent / 'raw_files' / f'{p.stem}({i}){file.suffix}').is_file():
    		pathlib.Path(file).replace(file.parent / 'raw_files' / f'{file.stem}({i}){file.suffix}')
    		break
    	else:
    		i += 1

    Неоднозначно все с FileNotFoundError. Например, при существовании директории будет FileExistsError
    try:
    	pathlib.Path(f / 'raw_files').mkdir(exist_ok=True)
    except FileNotFoundError:

    continue тут не нужно
    except FileNotFoundError:
    	print(f'Folder {f} not found')
    	err += 1
    	continue
    Ответ написан
    2 комментария
  • Как прочитать определённый элемент в файле json python?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    j = [...]
    print(j[0]["vladosikus"]["id"])
    Ответ написан
  • Как вывести результат двух списков циклом?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    x = [1,2,8]
    y = [4,5]
    
    for i,j in (dict.fromkeys(x) | dict(zip(x, y))).items():
        print(i, j)

    ...
    1 4
    2 5
    8 None
    Ответ написан
    Комментировать
  • Выдаёт ошибку на сайте pythonanywhere?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Читайте правила пользования бесплатного аккаунта
    Исходящие соединения ограниченны определённым набором сайтов
    Ответ написан
    Комментировать
  • Как сделать выборку строк из одного txt файла и записать в другой txt на Python?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Как-то так

    import re
    
    def read_file():
        with open('1.txt','r') as file:
            for line in file:
                f = re.findall(r"^(\w+?)\s", line)
                if f:
                    yield ''.join(f)
    
    
    def main():
        with open('2.txt','w') as file:
            for i in read_file():
                print(i, file=file)               
    
    if __name__ == "__main__":
        main()

    Ответ написан
    1 комментарий
  • Как извлечь текст между символами (или тегами) на Python?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Item\s\{(.+?slot:.+?)\}
    Ответ написан
  • Как из функции вывести данные циклом?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    yield
    Ответ написан
    Комментировать
  • Почему не записываются данные в файл json python?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    ну так тебе же явно в ошибке написано что
    'dict' object has no attribute 'append'
    Ответ написан
  • Как называется реализованный мною прием в классе Scene?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Композиции тут, ИМХО, нет потому как нет жесткой привязки между классом Scene и Pirat/Carrot/Customer - тут скорее агрегация

    Делегирование тоже под вопросом потому как само понятие предполагает возложить ответственность за что-то на кого-то. Пример
    spoiler

    class Actor:
        def line(self):
            print('Not Implemented')
    
    
    class Pirat(Actor):
        @staticmethod
        def line():
            print('I\'m Pirat')
    
    
    class Carrot(Actor):
        @staticmethod
        def line():
            print('I\'m Carrot')
    
    
    class Customer:
        @staticmethod
        def line():
            print('I\'m customer')
            
    class Starter:
        def play(self, who):
            return who.line()
        
    class Scene:
        def __init__(self):
            self.starter = Starter()
    
        def the_play(self, who):
            self.starter.play(who)
                
    if __name__ == '__main__':
        Scene().the_play(Carrot())
        Scene().the_play(Customer())

    Ответ написан
  • Как посчитать количество двойных 'X'?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    data = 'ZZYYXYYXZXZXZYXYYXZYZYYZYZZXYYZZXYXYZYZXYZXYZYZXZYZZZZYYZYXYXXXZYXZXYYXXYYYXXZZYYYZXZZZYXXXX'
    f = re.findall(r"((?<!X)X{2}(?!X))", data)
    print(len(f))


    # 2
    Ответ написан
  • Как проверить строку на соответствие шаблону?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    ^[a-zA-Z]+?x[a-zA-Z]+?x\d+?(\.|,)\d+?-[a-zA-Z]+?:\d+?.+?$

    или
    ^\D+?x\D+?x\d+?(\.|,)\d+?-\D+?:\d+?x\d+.+?$

    spoiler

    import re
    
    ss = [
        "HUxRUx23,5-FG:4x45₽",
        "HU44xRUx23,5-FG:4x45₽",
        "HUxRUx23,5-FG4:4x45₽",
        "HUxENx23,5-FG:4x50₽",
    ]
    
    for s in ss:
        if re.match(r"^\D+?x\D+?x\d+?(\.|,)\d+?-\D+?:\d+?x\d+.+?$", s):
        #if re.match(r"^[a-zA-Z]+?x[a-zA-Z]+?x\d+?(\.|,)\d+?-[a-zA-Z]+?:\d+?.+?$", s):        
            print("{} - Ok".format(s))
        else:
            print("{} - Err".format(s))

    и...
    HUxRUx23,5-FG:4x45₽ - Ok
    HU44xRUx23,5-FG:4x45₽ - Err
    HUxRUx23,5-FG4:4x45₽ - Err
    HUxENx23,5-FG:4x50₽ - Ok

    Ответ написан
    Комментировать
  • Как достать из строки значение через регулярное выражение?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    market_commodity_orders_header_promote\"\>(.+?)\<
    Ответ написан
    Комментировать
  • Как запринтить массив со словарями не в строку?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    с экрана ты эту простыню тоже за... просматривать
    для этого есть много сервисов
    например
    Ответ написан
    Комментировать
  • Как правильно стыковать данные по датам из нескольких массивов?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Как это учесть? Если дней в месяцах бывает не всегда 30

    spoiler

    import datetime
    import calendar
    
    summa = 1000
    
    d1 = '2022-02-01'
    d2 = '2022-02-05'
    
    d1 = datetime.datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.datetime.strptime(d2, "%Y-%m-%d")
    
    year = d1.year
    month = d1.month
    
    days_diff = d2 - d1
    month_days = calendar.monthrange(year, month)[1]
    summa_news = (month_days - days_diff.days) * summa / month_days
    
    print("Полная сумма {}".format(summa))
    print("Сумма с учетом дней {:.0f}".format(summa_news))

    и...
    Полная сумма 1000
    Сумма с учетом дней 857



    Ведь сравнивать по дате нельзя - дни могут не сойтись, а сойтись должно именно по месяцам.

    ну значит не сравнивай дни а сравнивай только по году и месяцу
    spoiler

    import datetime
    
    d1 = '2022-02-01'
    d2 = '2022-02-05'
    
    d1 = datetime.datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.datetime.strptime(d2, "%Y-%m-%d")
    
    # v1 - как строки
    if d1.strftime("%Y-%m") == d2.strftime("%Y-%m"):
        print("Ok")
    else:
        print("No")
    
    # v2 - как обьекты
    if d1.year == d2.year and d1.month == d2.month:
        print("Ok")
    else:
        print("No")


    проверить принадлежность даты периоду можно еще так
    spoiler

    import datetime
    
    d1 = '2022-02-01'
    d2 = '2022-02-05'
    d3 = '2022-05-05'
    
    d1 = datetime.datetime.strptime(d1, "%Y-%m-%d").timestamp()
    d2 = datetime.datetime.strptime(d2, "%Y-%m-%d").timestamp()
    d3 = datetime.datetime.strptime(d3, "%Y-%m-%d").timestamp()
    
    if d1 <= d2 <= d3:
        print("Ok")
    else:
        print("No")


    В чем хранить все эти данные

    ну для тестового примере храни в sqlite - сгенерировать fake data не особо сложная задача
    как и в целом в данной задаче я не вижу больших проблем - тут только работа с датами

    в сухом остатке БД у тебя будет содержать две таблицы
    1. Таблица с платежами - id, payer_id, period, summa
    2. Таблица с информацией по плательщикам - id, payer_id, fio
    По payer_id ты легко можешь их связать. Выборку из БД делаешь по диапазону дат.
    В основном скрипте проверяешь и суммируешь - как вариант промежуточного хранилища используй словарь
    spoiler

    credits = {
        "Иванов" : {
            "credit_1" : {
                '2021-01': 21221,
                .
                .
                .
                '2021-11': 234234
            }
        }
    }



    Значительно упросить задачу можно правильной выборкой данных
    Вот пример (в твоем случае category_sub_name - это заемщик, category_cur_name - это кредит)
    spoiler

    SELECT category_cur_name, category_cur_name, SUM(summa) AS summa FROM (
    	SELECT category_sub_name, category_cur_name, SUM(view_count) AS summa, 
           strftime("%Y-%m", created_at) AS 'period' 
           FROM orders WHERE period >= '2021-01' AND period <= '2021-12'
    	   GROUP BY category_sub_name, category_cur_name, period) 
       GROUP BY category_cur_name ORDER BY summa DESC

    62983194ca346600365564.png

    В таком варианте тебе просто надо посчитать начальное и конечное расхождение да исходя из условия что дата может быть не полный месяц

    Конечный вариант можно визуализировать в табличной форме например в pyqt
    Но с учетом специфики равных платежей у тебя скорее всего будет просто прямая

    Вот пример для расчета сезонности
    6298333332598997344560.png
    Ответ написан
    Комментировать
  • Поиск вне зависимости от позиции?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Если пря очень надо на регулярке
    import re
    
    ss = [
        "как дела",
        "дела как",
        "как у тебя дела",
        "как чё",
        "как вообще",
        "как проити",
        "дела хорошо"
    ]
    
    for s in ss:
        if re.findall(r"(как)", s) and re.findall(r"(дела)", s):
            print("{} - Ok".format(s))
        else:
            print("{} - Err".format(s))

    и...
    как дела - Ok
    дела как - Ok
    как у тебя дела - Ok
    как чё - Err
    как вообще - Err
    как проити - Err
    дела хорошо - Err
    Ответ написан
    Комментировать