鱼C论坛

 找回密码
 立即注册
查看: 1370|回复: 3

[已解决]修改字典文件

[复制链接]
发表于 2021-6-10 11:23:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  6.     'Beth': {
  7.         'phone': '9102',
  8.         'addr': 'Bar street 42'
  9.     },

  10.     'Cecil': {
  11.         'phone': '3158',
  12.         'addr': 'Baz avenue 90'
  13.     }

  14. }
复制代码

我希望写一段代码用来更新Dctionary_phonebook.py文件(而不是生成新的文件来覆盖它)。例如,当加入新的人名时,我希望删除最后一行的 "}", 然后写入新内容。但是以下代码会报错:
  1. fpeople = open('Dictionary_phonebook.py', 'a')
  2. fpeople.seek(-1, 1)
  3. 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


这段报错信息的含义是什么?怎样实现上述修改文件的功能?
最佳答案
2021-6-10 12:56:53


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

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

  6.     'Fishc': {
  7.         'phone': '3158',
  8.         'addr': 'Baz avenue 90'
  9.         }
  10. }'''
  11. fpeople.write(data)
  12. fpeople.close()
复制代码


另外像楼上说所,建议还是使用 pickle 之类的库比较友好方便
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-10 11:32:15 From FishC Mobile | 显示全部楼层
注意,当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出 io.UnsupportedOperation 错误

评分

参与人数 1鱼币 +1 收起 理由
gux + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-10 11:48:53 From FishC Mobile | 显示全部楼层
保存数据不必用编辑py文件的方式来保持,即麻烦又不可靠,可以了解一下pickle或者json库,都可以保存、加载py中的列表、字典等对象。

评分

参与人数 1鱼币 +1 收起 理由
gux + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-10 12:56:53 | 显示全部楼层    本楼为最佳答案   


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

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

  6.     'Fishc': {
  7.         'phone': '3158',
  8.         'addr': 'Baz avenue 90'
  9.         }
  10. }'''
  11. fpeople.write(data)
  12. fpeople.close()
复制代码


另外像楼上说所,建议还是使用 pickle 之类的库比较友好方便
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 01:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表