鱼C论坛

 找回密码
 立即注册
查看: 3346|回复: 11

[已解决]如何读取用二进制保存的txt文档内容

[复制链接]
发表于 2017-5-5 12:07:33 | 显示全部楼层 |阅读模式

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

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

x
在《零基础Python课后练习》中的31课,用二进制保存了文件内容在txt档中,

但是我希望读取 txt档中的二进制文件,发现使用open指令是出错的,应该怎么办呢?

程序如下,附件有原文件

  1. import pickle

  2. def save_file(boy, girl, count):

  3.            boy_file_name = 'boy_' + str(count) + '.txt'
  4.            girl_file_name = 'girl_' + str(count) + '.txt'

  5.            boy_file = open(boy_file_name, 'wb')
  6.            girl_file = open(girl_file_name, 'wb')

  7.            pickle.dump(boy, boy_file)
  8.            pickle.dump(girl, girl_file)

  9.            boy_file.close()
  10.            girl_file.close()


  11. def operation_file(file_name):

  12.            count = 1
  13.            boy = []
  14.            girl = []

  15.            file = open(file_name)

  16.            for each_line in file:
  17.                       if each_line[: 6] != '======':
  18.                                  (role, spoken) = each_line.split(':', 1)
  19.                                  if role == '小甲鱼':
  20.                                             boy.append(spoken)
  21.                                  if role == '小客服':
  22.                                             girl.append(spoken)
  23.                       else:
  24.                                  save_file(boy, girl, count)

  25.                                  boy = []
  26.                                  girl = []
  27.                                  count += 1

  28.            save_file(boy, girl, count)
  29.            file.close()

  30. operation_file('record.txt')
复制代码



用上述程序,使用二进制保存内容到了txt档内,但是应该怎么样再次读取哪些内容呢?

求助。。



最佳答案
2017-5-8 17:35:32
file = open(r'D:\Python Play\boy_1.txt', 'rb')

record.rar

681 Bytes, 下载次数: 5

文档内容来的

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-5 12:08:13 | 显示全部楼层
,,拜托,别关我的帖子呀。。
是真心求问的。。。
不懂啊。。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-5 13:56:04 | 显示全部楼层
用rb的方式打开文件,然后pickle.load读取文件内容。
例如:
file = open("filename","rb")
print(pickle.load(file))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-5 16:57:09 | 显示全部楼层
你既然知道写的时候要用wb
那你读的时候有用rb了么?显然没有吧,所以...你懂滴
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-5 22:14:16 | 显示全部楼层
本帖最后由 WeiChat阿威 于 2017-5-5 22:16 编辑
gopythoner 发表于 2017-5-5 16:57
你既然知道写的时候要用wb
那你读的时候有用rb了么?显然没有吧,所以...你懂滴


有用呀。。。

file = open('D:\Python Play\boy_1.txt', 'rb')

但是输出的结果是错误的额。。说是错误的。。

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    file = open('D:\Python Play\boy_1.txt', 'rb')
OSError: [Errno 22] Invalid argument: 'D:\\Python Play\x08oy_1.txt'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-5 22:15:33 | 显示全部楼层
莉子 发表于 2017-5-5 13:56
用rb的方式打开文件,然后pickle.load读取文件内容。
例如:
file = open("filename","rb")

大神,我用了'rb'的,但是仍然出现错误,,
file = open('D:\Python Play\boy_1.txt', 'rb')

错误显示的是:

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    file = open('D:\Python Play\boy_1.txt', 'rb')
OSError: [Errno 22] Invalid argument: 'D:\\Python Play\x08oy_1.txt'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 00:19:49 | 显示全部楼层
你发的代码里明明是这个file = open(file_name)
你用了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 08:45:34 | 显示全部楼层
用xb试试  以写入以及二进制模式打开文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-8 12:05:18 | 显示全部楼层
gopythoner 发表于 2017-5-6 00:19
你发的代码里明明是这个file = open(file_name)
你用了?

在代码中的 file = open(file_name),这里的打开文件是直接用正常中文保存的文件呢
所以直接读取呀,
然后再另存到了其他的新建txt中,用二进制保存的,,
提问的是,再读取这些用二进制保存的文件,使用file = open('D:\Python Play\boy_1.txt', 'rb'),还是出错哎。。
就不知道怎么办了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 17:35:32 | 显示全部楼层    本楼为最佳答案   
file = open(r'D:\Python Play\boy_1.txt', 'rb')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-8 19:10:15 | 显示全部楼层
莉子 发表于 2017-5-8 17:35
file = open(r'D:\Python Play\boy_1.txt', 'rb')

是的是的,输入这个之后,就能读取啦!
谢谢!!

不过,open(r'file_name', 'rb'),为什么这里要多一个r呀?因为设了路径吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-9 19:04:42 | 显示全部楼层
WeiChat阿威 发表于 2017-5-8 19:10
是的是的,输入这个之后,就能读取啦!
谢谢!!

有r的话系统就不会将“\”这个符号解释为转义了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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