Модуль 'self' не имеет атрибута 'file' error в формате класса - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю код python для проверки адреса электронной почты и номера телефона в данном файле CSV с помощью pandas, и я хочу написать отдельный файл 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)

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

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

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

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

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

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

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

if __name__ == "__main__":
    main()
1 голос
/ 24 февраля 2020

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

validation(self) 

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

my_validator = Validator()
my_validator.validation()
...