模块 'self' 在 class 格式中没有属性 'file' 错误
Module 'self' has no attribute 'file' error in class format
我正在构建一个 python 代码来使用 pandas 验证给定 CSV 文件中的电子邮件地址和 phone 号码,我想编写一个单独的 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。但是当我尝试使用正确的方法将此代码组织为正确的 class 时,它给出了一个错误提示,
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'
这是我创建的class。
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)
有人可以帮我解决这个问题吗?我们将不胜感激。提前致谢!
嗯,你不能从 class 本身调用实例方法
validation(self)
这个位应该在你的 class 之外,例如它可以在实例化你的 Validator 对象后从你的主函数调用。
my_validator = Validator()
my_validator.validation()
您没有导入 self。
self 是您在执行代码时所在的实例。
你的问题是你还不理解 classes。您试图在 class 中调用 class 方法,python 确实如此,但脚趾不喜欢。
我建议你看看 https://docs.python.org/3/tutorial/classes.html and/or https://www.w3schools.com/python/python_classes.asp。
您想将最后一行推到最后并添加
def main():
i = Validator()
i.validation()
if __name__ == "__main__":
main()
我正在构建一个 python 代码来使用 pandas 验证给定 CSV 文件中的电子邮件地址和 phone 号码,我想编写一个单独的 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。但是当我尝试使用正确的方法将此代码组织为正确的 class 时,它给出了一个错误提示,
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'
这是我创建的class。
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)
有人可以帮我解决这个问题吗?我们将不胜感激。提前致谢!
嗯,你不能从 class 本身调用实例方法
validation(self)
这个位应该在你的 class 之外,例如它可以在实例化你的 Validator 对象后从你的主函数调用。
my_validator = Validator()
my_validator.validation()
您没有导入 self。 self 是您在执行代码时所在的实例。
你的问题是你还不理解 classes。您试图在 class 中调用 class 方法,python 确实如此,但脚趾不喜欢。
我建议你看看 https://docs.python.org/3/tutorial/classes.html and/or https://www.w3schools.com/python/python_classes.asp。
您想将最后一行推到最后并添加
def main():
i = Validator()
i.validation()
if __name__ == "__main__":
main()