Подсчет OTP по отправителю. Отсутствуют первые четыре OTP от отправителей (первые), даже если у отправителя более 5 счетPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Подсчет OTP по отправителю. Отсутствуют первые четыре OTP от отправителей (первые), даже если у отправителя более 5 счет

Сообщение Anonymous »

Это мой скрипт для получения otps на основе количества отправителей, но я не смог найти недостающую логику, чтобы получить otps для первых четырех для первого отправителя.

Код: Выделить всё

import re, csv
import pandas as pd

class OTPAnalysis:
def __init__(self) -> None:
self.total_otp = []
self.count = 0
self.df = None
self.sender_count = {}
self.senders_above_5 = set()

def read_excel_file(self):
try:
self.df = pd.read_excel("Book1.xlsx")
#print(df.head())
self.otp_filtration(self.df)
except pd.errors.ParserError as e:
print(f"Error parsing CSV file: {e}")
exit(1)

def otp_filtration(self, data):
for index, row in data.iterrows():
preview = str(row["Content"])
try:
pattern = (r"\b\d{4,8}\b")
pattern_match = re.search(pattern, preview)
if pattern_match:
otp_found_value = pattern_match.group()
if otp_found_value:
get_content = re.findall(r"[A-Za-z]", preview)
if get_content:
unique_count_sender = self.unique_sender_count(row)
if self.senders_above_5:
self.total_otp.append(preview)
print(f"Code : {otp_found_value} and preview : {preview}")
self.write_to_csv(index)
except Exception as e:
print(f"Error processing row: {e}")

def unique_sender_count(self, row_sender):
sender = row_sender["sender"]
if sender not in self.sender_count:
self.sender_count[sender] = 1
else:
self.sender_count[sender] += 1

if self.sender_count[sender] >= 5:
self.senders_above_5.add(sender)
else:
pass

def write_to_csv(self, index_value):
if self.df is not None:
row_info = self.df.loc[index_value]
self.count += 1
print("====================", self.count)
print()
with open("opt_.csv", 'a+', newline="", encoding='utf-8') as file_:
writer = csv.writer(file_)
file_empty = file_.tell() == 0
if file_empty:
column_names = self.df.columns.tolist()
writer.writerow(column_names)
writer.writerow(row_info)

if __name__ == "__main__":
otp_filter = OTPAnalysis()
otp_filter.read_excel_file()
print(f"Total number of OTP : {len(otp_filter.total_otp)}")
print(otp_filter.senders_above_5)
for key, value in otp_filter.sender_count.items():
print(key, value)
....

Код: Выделить всё

# OUTPUT:
Total number of OTP : 146
{'KYC', 'SAT', 'JIO', 'BANK'} # Senders count greater than or equal to 5
APPLE 4
BANK 10
JIO 5
SAT 5
KYC 130
Здесь я пытаюсь получить все варианты с содержанием типа «ваш otp — 1234», и сначала я получаю всех отправителей, добавляю их в словарь и увеличиваю, если тот же отправитель отправлен на основе otp и если отправитель достигает значения больше или равно 5, я добавляю этих отправителей в set(). Затем из набора я печатаю параметры в зависимости от отправителя. Но для первых четырех отпечатков первого отправителя не печатаются, и он начинается с 5, а затем, начиная со второго отправителя, печатается от 1 до всех. почему это происходит только для первого отправителя.
если мы добавим 10+5+5+130 = 150, то должно быть 150, но я получаю только 146, что игнорирует первые 4 варианта. первого отправителя(БАНК) только даже если оно больше или равно 5.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ven-if-the
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»