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

0 投票
2 回答
2362 浏览
提问于 2025-04-17 07:03

我有一个小数据库文本文件 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)
    name = tom
    surname = zaq
    year = 22
    hobby = sport

然后我想修改这些数据:

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

最后我想得到:

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

现在我还想添加一个工作(job)和删除一个姓(surname)的数据:

(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

有没有什么解决办法或者提示可以帮我做到这一点?非常感谢!

2 个回答

0

补充一下Sebastien的评论:可以使用一个内存中的 SQLite 数据库。SQLite已经内置在Python中,所以设置起来只需要几行代码。


另外,除非这个格式不能改变,否则可以考虑使用YAML格式来处理文本。Python可以很方便地在YAML和Python对象(这些对象由Python的字典、列表、字符串、实数等组成)之间进行转换,一步搞定。

http://pyyaml.org/wiki/PyYAML


所以我的建议是:先把YAML转换成Python对象,然后再存入SQLite数据库,最后再转换回来。

2

使用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)中读取“文本”,然后在完成后再写入。

撰写回答