Я строю код Python для проверки адреса электронной почты и номера телефона в данном файле CSV с помощью панд, и я хочу написать отдельный файл CSV только с проверенными значениями. Я совершенно новичок в Python, и я написал код для функциональности следующим образом:

from email_validator import validate_email, EmailNotValidError
import pandas as pd
import re

file = r'sample.csv'
filtered = r'filtered.csv'
valid = r'Valid.csv'
df=pd.read_csv(file)

def eVali(dataFrame):
    try:
        validate_email(dataFrame)                 
        return True
    except EmailNotValidError:
        return False


def phoneValid(dataFrame):
    if re.search("\w{3}-\w{3}-\w{4}",dataFrame):
        return True
    else:
        return False

df["Email_validate"] = df['email'].apply(eVali)

df_fltrd = df[df['Email_validate']]
#del df_fltrd['Email_validate']
print(df_fltrd)

df_fltrd["Phone_validate"] =df_fltrd['phone'].apply(phoneValid)

df_valid = df_fltrd[df_fltrd["Phone_validate"]]
del df_valid["Phone_validate", "Email_validate"]
print(df_valid)

df_fltrd.to_csv(filtered)
df_valid.to_csv(valid)

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

Traceback (most recent call last):
  File "E:\myTasks\validator.py", line 7, in <module>
    class Validator:
  File "E:\myTasks\validator.py", line 47, in Validator
    validation(self.file)
AttributeError: module 'self' has no attribute 'file'

Это класс, который я создал.

< Сильный > Validator.py

    import self as self
from email_validator import validate_email, EmailNotValidError
import pandas as pd
import re


class Validator:

    def __init__(self):
        self.file = r'sample.csv'
        self.outFile =r'filteredSample.csv'



    def emailValid(dataframe):
        try:
            validate_email(dataframe)
            return True
        except EmailNotValidError:
            return False

    def phoneValid(dataframe):
        if re.search("\w{3}-\w{3}-\w{4}", dataframe):
            return True
        else:
            return False

    def validation(self):
        df = pd.read_csv(self.file)
        df = df.copy();
        df["Email_validate"] = df['email'].apply(Validator.emailValid)

        df_filtered = df[df['Email_validate']]
        print(df_filtered)

        df_filtered["Phone_validate"] = df_filtered['phone'].apply(Validator.phoneValid)

        df_valid = df_filtered[df_filtered["Phone_validate"]]
        del df_valid["Email_validate"]
        del df_valid["Phone_validate"]
        print(df_valid)

        df_valid.to_csv(self.outFile)

    validation(self)

Может кто-нибудь, пожалуйста, помогите мне с этим. Это будет действительно оценено. Заранее спасибо!

0
Upz 24 Фев 2020 в 15:02

2 ответа

Лучший ответ

Ну, вы не можете вызвать метод экземпляра из самого класса

validation(self) 

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

my_validator = Validator()
my_validator.validation()
1
Raphael St 24 Фев 2020 в 12:27

Вы не импортируете self . self - это экземпляр, в котором вы находитесь во время выполнения кода.

Ваша проблема в том, что вы еще не поняли классы. Вы пытались вызвать метод класса внутри класса, что делает Python, но пальцы не нравятся.

Я бы посоветовал вам взглянуть на https://docs.python.org/3 /tutorial/classes.html и / или https://www.w3schools.com /python/python_classes.asp.

Вы хотите вставить последнюю строку в конец и добавить

def main():
    i = Validator()
    i.validation()

if __name__ == "__main__":
    main()
1
user2563336 24 Фев 2020 в 12:37