gux 发表于 2021-6-10 11:23:18

修改字典文件

已有字典文件 Dictionary_phonebook.py 如下:
people = {
    'Alice': {
      'phone': '2431',
      'addr': 'Foo drive 23'
    },

    'Beth': {
      'phone': '9102',
      'addr': 'Bar street 42'
    },

    'Cecil': {
      'phone': '3158',
      'addr': 'Baz avenue 90'
    }

}
我希望写一段代码用来更新Dctionary_phonebook.py文件(而不是生成新的文件来覆盖它)。例如,当加入新的人名时,我希望删除最后一行的 "}", 然后写入新内容。但是以下代码会报错:
fpeople = open('Dictionary_phonebook.py', 'a')
fpeople.seek(-1, 1)
fpeople.close()
报错信息如下:
Traceback (most recent call last):
File "D:\PycharmProjects\Phonebook_related\phonebook_update.py", line 25, in <module>
    fpeople.seek(-1, 1)
io.UnsupportedOperation: can't do nonzero cur-relative seeks


这段报错信息的含义是什么?怎样实现上述修改文件的功能?

wp231957 发表于 2021-6-10 11:32:15

注意,当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出 io.UnsupportedOperation 错误

hrp 发表于 2021-6-10 11:48:53

保存数据不必用编辑py文件的方式来保持,即麻烦又不可靠,可以了解一下pickle或者json库,都可以保存、加载py中的列表、字典等对象。

Twilight6 发表于 2021-6-10 12:56:53



这样可以实现,不过前提是 } 属于读取的字典最后一个字符,不能有多余的字符:

fpeople = open('Dictionary_phonebook.py', 'a')
lenght = fpeople.tell()
fpeople.seek(lenght-1)
fpeople.truncate()
data = ''',

    'Fishc': {
      'phone': '3158',
      'addr': 'Baz avenue 90'
      }
}'''
fpeople.write(data)
fpeople.close()

另外像楼上说所,建议还是使用 pickle 之类的库比较友好方便
页: [1]
查看完整版本: 修改字典文件