python如何编辑文本数据库中的数据?

python如何编辑文本数据库中的数据?,python,database,file,text,rewrite,Python,Database,File,Text,Rewrite,我有一个小数据库文本文件db.txt: (peter) name = peter surname = asd year = 23 (tom) name = tom surname = zaq year = 22 hobby = sport (paul) name = paul surname = zxc hobby = music job = teacher 如何从例如tom获取所有数据段?我想加入变量:

我有一个小数据库文本文件db.txt:

(peter)
    name = peter
    surname = asd
    year = 23
(tom)
    name = tom
    surname = zaq
    year = 22
    hobby = sport
(paul)
    name = paul
    surname = zxc
    hobby = music
    job = teacher
如何从例如tom获取所有数据段?我想加入变量:

(tom)
    name = tom
    surname = zaq
    year = 22
    hobby = sport
然后我想更改数据:

replace("year = 22", "year = 23")
并获得:

(tom)
    name = tom
    surname = zaq
    year = 23
    hobby = sport
现在添加(职务)和删除(姓氏)数据:

最后将更改的部分重写为旧的db.txt文件:

(peter)
    name = peter
    surname = asd
    year = 23
(tom)
    name = tom
    year = 23
    hobby = sport
    job = taxi driver
(paul)
    name = paul
    surname = zxc
    hobby = music
    job = teacher

有什么解决方案或提示吗?非常感谢

塞巴斯蒂安评论的附录:使用内存中的SQLite DB。SQLite已经嵌入到Python中,所以只需设置几行即可


此外,除非该格式不能更改,请考虑YAML的文本。Python可以在一个步骤中轻松地转换YAML和Python对象(由Python dict、列表、字符串、实数等组成的对象)


因此,我的建议是使用YAML->Python对象->SQLite DB,然后再返回。

按照@aitchnyu的建议使用,并对原始格式进行一些修改,这是一项简单的任务:

import yaml

text = """
peter:
    name: peter
    surname: asd
    year: 23
tom:
    name: tom
    surname: zaq
    year: 22
    hobby: sport
paul:
    name: paul
    surname: zxc
    hobby: music
    job: teacher
"""

persons = yaml.load(text)
persons["tom"]["year"] = persons["tom"]["year"]*4   # Tom is older now
print yaml.dump(persons, default_flow_style=False)
结果:

paul:
  hobby: music
  job: teacher
  name: paul
  surname: zxc
peter:
  name: peter
  surname: asd
  year: 23
tom:
  hobby: sport
  name: tom
  surname: zaq
  year: 88

当然,你应该从你的文件中读取“文本”(dB.txt),在完成

之后,你要做很多的查询,比如“添加作业”或“更改年龄”,你应该考虑将你的数据迁移到SQLite数据库,这是一个比非标准文本文件更适合存储和操作数据的解决方案。你的问题更像吗?“我应该使用哪种结构”或者“如果信息发生变化,我真的必须每次读写整个文件吗?”
paul:
  hobby: music
  job: teacher
  name: paul
  surname: zxc
peter:
  name: peter
  surname: asd
  year: 23
tom:
  hobby: sport
  name: tom
  surname: zaq
  year: 88