鱼C论坛

 找回密码
 立即注册
查看: 834|回复: 10

我想把接收到的内容用pickle以二进制保存 代码报错 求解答

[复制链接]
发表于 2018-10-26 22:37:44 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
代码:
import pickle
def file_write(file_name):
        f = open(file_name,'w')
        while True:
                write_sth = input('请输入内容[输入\':w\'退出程序]:')
                if write_sth != ':w':
                        f.write('%s\n' % write_sth)
                        f.close()
                        f = open(file_name,'ab')
                        pickle.dump(write_sth,f)
                else:
                        print('Thx for use NotePad Program.')
                        break
        f.close()
print('请输入文件名:',end = ' ')
file_name =input()
file_write(file_name)

每当我运行第一次输入没报错,第二次就报错
报错内容是:NotePad.py", line 7, in file_write
    f.write('%s\n' % write_sth)
TypeError: a bytes-like object is required, not 'str'
请问怎么解决呢……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-27 06:33:03 | 显示全部楼层
不使用pickle.dump,是pickle.dumps
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-27 13:23:46 From FishC Mobile | 显示全部楼层
alltolove 发表于 2018-10-27 06:33
不使用pickle.dump,是pickle.dumps

改成dumps还是报错
说是an interger is requried
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-27 14:29:53 | 显示全部楼层
正确写法应该是这样
下面这两行我没明白是做什么用 但去掉了其它都可以正常。另外应该是输入 w 退出是吧 我看你写成了 输入:w 才能退出
                     #   f.write('%s\n' % write_sth)
                      #  f.close()


  1. def file_write(file_name):
  2.         f = open(file_name,'wb')
  3.         while True:
  4.                 write_sth = input('请输入内容[输入\':w\'退出程序]:')
  5.                 if write_sth != 'w':

  6.                         f = open(file_name,'ab')
  7.                         pickle.dump(write_sth,f)
  8.                 else:
  9.                         print('Thx for use NotePad Program.')
  10.                         break
  11.         f.close()
  12. print('请输入文件名:',end = ' ')
  13. file_name =input()
  14. file_write(file_name)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-27 21:57:38 From FishC Mobile | 显示全部楼层
暗夜之隐 发表于 2018-10-27 14:29
正确写法应该是这样
下面这两行我没明白是做什么用 但去掉了其它都可以正常。另外应该是输入 w 退出是吧  ...

谢谢你 你这个运行可以
但是我保存几行数据之后 再用pickle.load加载怎么只有第一次输入的第一行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-27 21:58:53 From FishC Mobile | 显示全部楼层
暗夜之隐 发表于 2018-10-27 14:29
正确写法应该是这样
下面这两行我没明白是做什么用 但去掉了其它都可以正常。另外应该是输入 w 退出是吧  ...

就是这样
IMG_7786.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-27 22:11:50 | 显示全部楼层
fishclove 发表于 2018-10-27 21:57
谢谢你 你这个运行可以
但是我保存几行数据之后 再用pickle.load加载怎么只有第一次输入的第一行的

因为确实只保存了一段。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-27 22:14:48 From FishC Mobile | 显示全部楼层
暗夜之隐 发表于 2018-10-27 22:11
因为确实只保存了一段。

不是没退出 在while True情况下 不断输入的内容都保存了吗?
再有 请问一个文件打开了 没有关闭 还能这样再打开的吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-27 22:22:33 | 显示全部楼层
fishclove 发表于 2018-10-27 22:14
不是没退出 在while True情况下 不断输入的内容都保存了吗?
再有 请问一个文件打开了 没有关闭 还能这 ...

我觉得应该是不行, 这个是pickle  存入的信息是什么 后面就读出什么,但是打开的时候只有一个选择  就是全部读出来。 比如你第一次输入一个列表 。第二次输入一个字符串或是字典。 这就算保存进去了 ,你读出来咋办。 所以只能再重新新建一个文件 一次输入保存一个文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-27 22:25:15 | 显示全部楼层
fishclove 发表于 2018-10-27 22:14
不是没退出 在while True情况下 不断输入的内容都保存了吗?
再有 请问一个文件打开了 没有关闭 还能这 ...


再加2行代码 给文件重新命名


  1. import pickle

  2. def file_write(file_name):
  3.         f = open(file_name,'wb')
  4.         while True:
  5.                 write_sth = input('请输入内容[输入\':w\'退出程序]:')
  6.                 if write_sth != 'w':

  7.                         f = open(file_name,'ab')
  8.                         pickle.dump(write_sth,f)

  9.                         print('请输入文件名:',end = ' ')
  10.                         file_name =input()

  11.                         
  12.                 else:
  13.                         print('Thx for use NotePad Program.')
  14.                         break
  15.         f.close()
  16. print('请输入文件名:',end = ' ')
  17. file_name =input()
  18. file_write(file_name)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-27 22:45:46 From FishC Mobile | 显示全部楼层
呃呃 好吧 我终于知道了pickle.liad方法每次读取一个字符串
我的目的是将随笔 保存做一个二进制文件,后面想看的时候一起打开 请问保存为一个文件可以一次性load全部文档吗??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-5 02:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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