社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Andrew • 5 年前 • 1637 次点击  

我对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
 
1637 次点击  
文章 [ 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)

你们都准备好了