Py学习  »  Python

从python中的.txt文件读取类对象[关闭]

Andrew • 5 年前 • 1705 次点击  

我对python还比较陌生,还想学习这门语言。在过去的一天里,我一直试图找出解决这个问题的代码,我知道它可能会相对简单。

我要做的是读取一个文本文件,其中包含以下格式的数据,遍历数据并为其创建一个类对象。谢谢您!

class Profile:

    def __init__(self, given_name='', family_name='', email='', gender='', status=''):
        self.__given_name = given_name
        self.__family_name = family_name
        self.__email = email
        self.__gender = gender
        self.__status = status
        self.__number_friends = 0
        self.__friends_list = []


    def set_given_name(self, name):
        self.__given_name = name

    def get_given_name(self):
        return self.__given_name

    def set_family_name(self, name):
        self.__family_name = name

    def get_family_name(self):
        return self.__family_name

    def set_email(self, email):
        self.__email = email

    def get_email(self):
        return self.__email

    def set_gender(self, gender):
        self.__gender = gender

    def get_gender(self):
        return self.__gender

    def set_status(self, status):
        self.__status = status

    def get_status(self):
        return self.__status

    def set_number_friends(self, no_friends):
        self.__number_friends = no_friends

    def get_number_friends(self):
        return self.__number_friends

    def set_friends_list(self, friends_list):
        self.set_number_friends(len(friends_list))
        self.__friends_list = friends_list

    def get_friends_list(self):
        return self.__friends_list

    def __str__(self):
        string = self.__given_name + ' ' + self.__family_name + ' ' + self.__email + ' ' + self.__gender + '\n'
        string += self.__status + '\n'
        string += str(self.__number_friends) + '\n'
        for friend_email in self.get_friends_list():
            string += friend_email + '\n'
        return string


    def add_friend(self, email):

        if self.is_friend(email) == True:
            return False;

        self.__friends_list.append(email)
        self.__number_friends += 1

        return True

    def remove_friend(self, email):

        if self.is_friend(email) == False:
            return False;

        self.__friends_list.remove(email)
        self.__number_friends -= 1

        return True



    def is_friend(self, email):        
        found = False

        for email_address in self.__friends_list:
            if email == email_address:
                found = True

        return found


    def __eq__(self, email):
        if self.__email == email:
            return True
        elif self.__email != email:
            return False
        return NotImplemented
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47529
 
1705 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Jürgen Zornig
Reply   •   1 楼
Jürgen Zornig    6 年前

我假设“文本文件”是指某种csv/tsv格式,这是一个非常常见的用例。它还意味着csv文件有某种头,它定义了与类的字段名相对应的字段名,因此 DictReader 类为您提供适当的抽象级别。

csv模块是python核心模块的一部分,因此您只需导入它,不需要安装任何东西

下面的代码片段可以用作框架来进一步构建围绕它的代码

import csv

with open('profiles.csv', newline='') as csvfile:
   reader = csv.DictReader(csvfile)
   for row in reader:
      p = Profile(given_name=row['given_name']
                , family_name=row['family_name']
                , email=row['email']
                , gender=row['gender']
                , status=row['status']
      )

      print(p) # print string representation of the class

尽管如此,如果dictreader不适合您的需要,您也可以自己分析文本文件的每一行,csv模块文档中有一些示例。

hhaefliger
Reply   •   2 楼
hhaefliger    6 年前

这可能是做你想做的最简单的方法:

你可以写一个这样的程序:

test = Profile()
with open('file.txt', 'r') as f:
    test.set_given_name = f.readlines()[0]
    test.set_family_name = f.readlines()[1]
    test.set_email = f.readlines()[2]
    test.set_gender = f.readlines()[3]
    test.set_status = f.readlines()[4]
    test.set_number_friends = f.readlines()[5]
    test.set_friends_list = f.readlines()[6]

在file.txt中:

John
Doe
johndoe@gmail.com
Male
single
5
['1', '2']
陈海栋
Reply   •   3 楼
陈海栋    6 年前

python的最佳实践是使用json内置的dict数据类型:

如: 文本文件.json: {"name":"Fox Mulder","email":"fox@findthetruth.com"} 读卡器.py:

import json
with open("text_file.json",'r') as file:
  a=file.readlines()
dict_0=json.loads(a[0])

然后是你的读者课:

class Profile:
  def reader(self,input_dict,*kwargs):
    for key in input_dict:
      try:
        setattr(self, key, input_dict[key])
      except:
        print("no such attribute,please consider add it at init")
        continue

如果你想读书就这么做

profile_instance=Profile()
profile_instance.reader(dict_0)

你们都准备好了