Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何填充现有文件中的对象_Python_File - Fatal编程技术网

Python 如何填充现有文件中的对象

Python 如何填充现有文件中的对象,python,file,Python,File,我的问题是如何将对象填充到某个现有文件中。假设我的文件名是“abc.txt”。我是说fname,lname,age,gender都应该填入文件中 #!usr/bin/python class People: def __init__(self, fname=None, lname=None, age=None, gender=None): self.fname = fname self.lname = lname self.age =

我的问题是如何将对象填充到某个现有文件中。假设我的文件名是“abc.txt”。我是说fname,lname,age,gender都应该填入文件中

#!usr/bin/python

class People:

    def __init__(self, fname=None, lname=None, age=None, gender=None):
        self.fname = fname
        self.lname = lname
        self.age = age
        self.gender = gender

    def display(self):
        print self.fname

    ppl1 = People('John','W','Cooper',23,'Male')
    ppl2 = People('Jack','A','Kalis',40,'Male')
    ppl1.display()
    ppl2.display()

如果只是希望将属性(逗号分隔)写入文件,可以执行以下操作:

ppl = People('John', 'Cooper', 23, 'Male')

f = open('abc.txt', 'w')
ppl_attrs = [ppl.fname, ppl.lname, str(ppl.age), ppl.gender]
f.write(','.join(ppl_attrs))
f.close()

正如python文档中所描述的,您只需要写入文件的末尾(在检查文件是否首先存在之后)

如果您只想保存,文件就可以了。但db是更好的选择。 sqlite是非常简单和良好的数据库,它包含在python中。 使用sqlite怎么样

下面是示例代码。(抱歉,代码又快又脏)



你是说如何将这些人物对象写入文本文件?是的。当我写这篇文章时,我会搜索fname中是否有johnstring。同样,对于lname、age等,为什么要保存到某个文件中?你想要像csv这样的人类可读数据文件吗?不。我将把这个对象写在一个文件中,然后在一个文件中进行搜索。请参阅我上面的评论@everyeveryi如果要在文件中搜索,使用sqlite库如何?只需在文件中添加新成员很容易,但在文件中搜索/更新/删除并不容易。当您想要写入csv文件时,仍然强烈建议使用
csv
模块…我可以写入对象吗?是否以二进制形式写入对象?听起来你需要在事后重新浏览文件?同意,
csv
通常是必须的。我只是想给出一个简短的例子,不希望csv代码占据一半的答案。不,不是二进制形式。我只想让对象进入文本文件,我的要求是每当我搜索像“John”这样的字符串时,它都会搜索我的名字并显示出来。此外,我有更多的对象而不仅仅是一个它只写属性吗?像约翰·W·库珀,23岁,男性会简单地进入文件吗?这段代码写道:
john W,库珀,23岁,男性
。我使用逗号是因为空格可能会引起误解(例如“John W”),现在假设我希望文本文件中包含多个对象?这是怎么发生的?我想把这些东西写下来。而且我有这么多的对象。我怎么能写两个对象??请帮助编辑脚本。希望它对您有用。当我在最后一行编写people.display()时,它显示错误:AttributeError:“list”对象没有属性“display”people现在是一个列表,因为它包含多个人。您可以在循环中编写person.display()。已经修改了脚本。这看起来很吓人。我只是个新手
class People:

    def __init__(self, fname=None, lname=None, age=None, gender=None):
        self.fname = fname
        self.lname = lname
        self.age = age
        self.gender = gender

def display(self):
    print self.fname

people = [People('John','W Cooper',23,'Male'),
           People('James','W Cooper',30,'Male'),
           People('Kate','W Cooper',20,'Female')]
f = open("abc.txt", "w")
for person in people:
    f.write( person.fname +","+ person.lname +","+ str(person.age) +","+ person.gender + '\n' )
    person.display()
f.close()
ppl = People('John W','Cooper',23,'Male')

with open("abc.txt", 'w') as f:
    f.write(",".join((ppl.fname, ppl.lname, str(ppl.age), ppl.gender)))
#!usr/bin/python

import sqlite3

class People:

    def __init__(self, fname=None, lname=None, age=None, gender=None):
        self.fname = fname
        self.lname = lname
        self.age = age
        self.gender = gender
        self.save()

    def save(self):
        conn = sqlite3.connect('people.db')
        c = conn.cursor()
        c.execute("""create table if not exists
                     tbl_people(fname text, lname text,
                                age integer, gender text,
                                primary key (fname, lname) )""")
        c.execute("""insert or replace into tbl_people(fname, lname, age, gender)
                     values ('%s', '%s', %d, '%s')
                  """ % (self.fname, self.lname, self.age, self.gender) )
        conn.commit()
        conn.close()


    def display(self):
        print self.fname

def search(fname, lname):
    conn = sqlite3.connect('people.db')
    c = conn.cursor()
    c.execute("select * from tbl_people where fname='%s' and lname='%s'"%(fname,lname))
    ppl = c.fetchone()
    conn.close()
    if ppl is not None:
        return People(ppl[0], ppl[1], ppl[2], ppl[3])
    else:
        return None

ppl = People('John','Cooper',23,'Male')
ppl2 = People('Jane','Cooper',22,'Female')
ppl3 = search('John', 'Cooper')
ppl.display()
ppl3.display()