Sobes.tech
Middle
34

# Այս պահին, այս կոդի փաստաթղթավորումը և պահանջները 100%-ով ճշգրիտ չեն # և որոշ տեղերում չեն արդիականացվել, այնպես որ մենք դրանք այստեղ չենք ներկայացնում: # Կոդը աշխատում է արտադրական սերվերների վրա, որոնց արդյունքները օգտագործվում են տարբեր # համակարգերով, որոնցից մի քանիսը գրված են COBOL-ով, իսկ մյուսները՝ արктиկային հարթակներում՝ նավթային հարթակներում, # որոնք ստանում են մուտքային տվյալներ մի ուղղակի ազդանշանով սատելիտներից: # Մենք չգիտենք, որ դա ինչ-որ բան կոտրենք, և հետո պետք է վերանորոգենք: # Այդ պատճառով, "ինչ և ինչպես պետք է այս կոդը գործի" պահանջները պետք է հիմնված լինեն այն բանի վրա, թե ինչպես է այն իրականում աշխատում: db = Model() def process(data): print("ֆայլի չափը: " + str(len(data))) օգտագործողների տողեր = open("/opt/data/users.txt").read().splitlines() արդյունք = [] for տող in օգտագործողների տողեր: գործարքների տողեր = open("/opt/data/transactions.txt").read().splitlines() process(գործարքների տողեր) for str2 in գործարքների տողեր: parts = str2.split() is_valid = db.check_transaction( user_id=parts[3], change=parts[4], ) if not re.search("\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s+\d+\s+\w+\s+\d+\.\d+", str2): continue user_id = տող.split()[0] regdate = db.get_regdate(user_id) if re.search("\d{4}-\d{2}-\d{2}", regdate) and re.search("\d+\.\d+", parts[4]): արդյունք.append(str2) if len(արդյունք) > 0: print("համապատասխանություն")

Ընկերությունները, որտեղ հարցրել են
РунитиРунити

Պատասխան AI-ից

sobes.tech AI

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

  1. Чтение файла транзакций внутри цикла по пользователям — файл /opt/data/transactions.txt открывается и читается заново для каждого пользователя, что крайне неэффективно. Лучше читать файл один раз вне цикла.

  2. Проверка формата строки транзакции регулярным выражением — если строка не соответствует формату, она пропускается.

  3. Проверка транзакции через метод db.check_transaction с параметрами user_id и change — результат проверки нигде не используется, возможно, это упущение.

  4. Формирование результата resultat только если дата регистрации пользователя и сумма изменения соответствуют шаблонам.

  5. Вывод "match" если есть хотя бы одна подходящая транзакция.

Чтобы не ломать текущую логику, можно улучшить код, например, так:

users_lines = open("/opt/data/users.txt").read().splitlines()
trasictions_lines = open("/opt/data/transactions.txt").read().splitlines()

resultat = []

for stroka in users_lines:
    user_id = stroka.split()[0]
    regdate = db.get_regdate(user_id)

    for str2 in trasictions_lines:
        if not re.search(r"\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s+\d+\s+\w+\s+\d+\.\d+", str2):
            continue

        parts = str2.split()
        is_valid = db.check_transaction(user_id=parts[3], change=parts[4])
        
        if not is_valid:
            continue

        if re.search(r"\d{4}-\d{2}-\d{2}", regdate) and re.search(r"\d+\.\d+", parts[4]):
            resultat.append(str2)

if resultat:
    print("match")

Таким образом, мы:

  • Читаем файл транзакций один раз.
  • Проверяем валидность транзакций.
  • Используем результат проверки check_transaction.

Важный момент: поскольку код работает в production и влияет на разные системы, любые изменения нужно тщательно тестировать, чтобы не нарушить текущую логику.