集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2541|回复: 3

给深度学习入门者的Python快速教程基础篇之二十一

[复制链接]
4798345 发表于 2017-5-23 17:08:25 | 显示全部楼层 |阅读模式
文件操作和pickle

在Python中,推荐用上下文管理器(with-as)来打开文件,IO资源的管理更加安全,而且不用老惦记着给文件执行close()函数。还是举例子来说明,考虑有个文件name_age.txt,里面存储着名字和年龄的关系,格式如下:
Tom,8
Jerry,7
Tyke,3
...

读取文件内容并全部显示:
with open('name_age.txt', 'r') as f: # 打开文件,读取模式
lines = f.readlines() # 一次读取所有行
for line in lines: # 按行格式化并显示信息
name, age = line.rstrip().split(',')
print('{} is {} years old.'.format(name, age))

open()的第一个参数是文件名,第二个参数是模式。文件的模式一般有四种,读取(r),写入(w),追加(a)和读写(r+)。如果希望按照二进制数据读取,则将文件模式和b一起使用(wb, r+b…)。

再考虑一个场景,要读取文件内容,并把年龄和名字的顺序交换存成新文件age_name.txt,这时可以同时打开两个文件:
with open('name_age.txt', 'r') as fread, open('age_name.txt', 'w') as fwrite:
line = fread.readline()
while line:
name, age = line.rstrip().split(',')
fwrite.write('{},{}\n'.format(age, name))
line = fread.readline()

有的时候我们进行文件操作是希望把对象进行序列化,那么可以考虑用pickle模块:
import pickle

lines = [
"I'm like a dog chasing cars.",
"I wouldn't know what to do if I caught one...",
"I'd just do things."
]

with open('lines.pkl', 'wb') as f: # 序列化并保存成文件
pickle.dump(lines, f)

with open('lines.pkl', 'rb') as f: # 从文件读取并反序列化
lines_back = pickle.load(f)

print(lines_back) # 和lines一样

注意到,序列化的时候就得使用b模式了。Python2中有个效率更高的pickle叫cPickle,用法和pickle一样,在Python3中就只有一个pickle。
fpga_wuhan 发表于 2017-5-24 11:05:15 | 显示全部楼层
给深度学习入门者的Python快速教程基础篇之二十一
zxopen08 发表于 2017-6-1 11:50:51 | 显示全部楼层
给深度学习入门者的Python快速教程基础篇之二十一
zxopenljx 发表于 2022-11-8 10:05:17 | 显示全部楼层
给深度学习入门者的Python快速教程基础篇之二十一
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 03:16 , Processed in 0.057877 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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