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

问题描述:

我有一个小数据库,文本文件db.txt:Python。如何编辑文本数据库中的数据?

(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) 
    name = tom 
    surname = zaq 
    year = 22 
    hobby = sport 

然后我要改变数据:

replace("year = 22", "year = 23") 

,并得到:

(tom) 
    name = tom 
    surname = zaq 
    year = 23 
    hobby = sport 

现在添加(工作)和删除(姓)数据:

(tom) 
    name = tom 
    year = 23 
    hobby = sport 
    job = taxi driver 

最后重写改变部分到旧的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 

任何解决方案或提示如何做到这一点?非常感谢!

+5

我打算做很多像”add job“或”change age“这样的查询,你应该考虑将你的数据迁移到SQLITE da tabase,这是比非标准文本文件更适合存储和操作数据的解决方案。 –

+0

您的问题更像是“我应该使用哪种结构”还是像“如果信息发生变化,我真的必须每次读写整个文件?” –

附录Sebastien的评论:使用内存 SQLite数据库。 SQLite已经嵌入到Python中,所以它只需要设置几行。


而且,除非该格式无法更改,考虑YAML的文本。 Python可以轻易地在YAML和Python对象(一个由python字典,列表,字符串,实数等组成的对象)中进行一步转换。

http://pyyaml.org/wiki/PyYAML


所以我的建议是YAML - > Python对象 - >的SQLite数据库,然后再返回。

使用PyYAML通过@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)中写完并写完后