Python3入门(十一)——IO编程
一、文件读写
python的文件操作和C是兼容的
1.读文本文件
读文件操作如下:
f = open("F:/1.txt", "r")
data = f.read()
print(data)
其中"r"表示read,读文件,再使用read()方法就把文件内容读取出来了
和Java一样,操作文件需要close掉,并且强烈建议在finally中close,代码如下:
try:
f = open("F:/1.txt", "r")
data = f.read()
print(data)
finally:
if f:
f.close()
但是!Python这里又支持了with操作,这比Java必须要写上面类似的代码确实要简洁不少:
with open("F:/1.txt", "r") as f:
print(f.read())
这样,try finally以及close等全部可以省略了!
这里read()也可以加参数size来限制读取的字节数,防止一次性读取太多而爆掉:
print(f.read(4))
或者按行读取也是阔以的:
readline() # 读取一行
readlines() # 读取所有行,返回list
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
这种带有read()方法的对象称为 file-like Object,常见的有StringIO
2.读二进制文件
使用rb模式打开即可:
f = open("F:/1.jgp", "rb")
f.read()
3.字符编码
默认是UTF-8,指定编码可以添加encoding参数
f = open("F:/1.txt", "r", encoding="GBK")
f.read()
忽略一些乱七八糟的错误,可以使用errors:
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
4.写文件
和读类似,w、wb进行文本文件、二进制文件的写,文件编码同读文件的操作
with open("F:/1_new.txt", "w") as f:
f.write("Hello Python3!")
w是覆盖写的形式,追加使用a参数,完整参照文档
二、StringIO与BytesIO
1.StringIO
在内存中读写string,称之为StringIO。它可以在内存中进行读写:
from io import StringIO f = StringIO()
f.write("Hello ")
f.write("Python3!")
print(f.getvalue())
可以像文件一样进行操作:
from io import StringIO
f = StringIO("Hello\nPython3!")
while True:
line = f.readline()
if line == "":
break
print(line.strip())
2.bytesIO
f2 = BytesIO()
f2.write("我爱中国".encode("UTF-8"))
注意这里写入的不是字符串string,而是经过编码后的bytes
三、操作文件和目录
使用例如dir cp等操作文件的命令,可以通过Python的os模块来实现,底层是通过调用系统的接口进行具体实现的:
>>> import os
>>> os.name # 操作系统类型
'posix'——代表linux,nt代表windows,linux中还可以通过os.uname()来获取更加详细的信息
1.获取环境变量:
>>> os.environ #查看所有环境变量
>>> os.environ.get('PATH') #获取特定变量
2.操作文件和目录
os.path中的部分操作:
# 查看当前目录的绝对路径:
>>> os.path.abspath('.')
'/Users/michael'
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
>>> os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然后创建一个目录:
>>> os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
>>> os.rmdir('/Users/michael/testdir')
请注意路径的操作不要直接强行通过字符串拆分合并进行,而是使用os模块的方法!
更多操作,参见相关文档
四、序列化
python通过 pickle 模块进行序列化操作!
pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:
>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d) >>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
反序列化方法通过load方法实现:
>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
与JSON转换:
类似Java的fastjson等对象与json的转换,python提供了json模块用来提供json字符串与dict的转换。好处与便利性不再赘述:
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
#返回一个json的str字符串
'{"age": 20, "score": 88, "name": "Bob"}'
类似的,也提供了镜像方法loads,返回与JSON对应的dict
>>> json.loads(json_str)
JSON与对象的转换:
上面介绍了默认的JSON字符串与dict的转换,当然肯定要有class对象与JSON的转换了:
主要通过dumps()参数列表,实现一个class到dict的转换函数即可:
def student2dict(std):
return {
'name': std.name,
'age': std.age,
'score': std.score
} >>> print(json.dumps(s, default=student2dict))
{"age": 20, "name": "Bob", "score": 88}
Python3入门(十一)——IO编程的更多相关文章
- 06 . Python3入门之IO编程(文件操作)
IO编程简介 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口 ...
- python3中文件/IO编程
python3的文件操作可谓是我见过所有语言中最舒服的,那我们来一起看一下py3中的文件操作. 1:文件的打开方式有以下几种: 注:以上图表参考菜鸟教程 2:定位读写文件 f = open(&quo ...
- Python魔术世界 1 如何使用Visual Studio在WIN10中一键安装Python3入门编程环境并测试Django
本文通过VS安装Python和Django的环境,创建了一个Web程序,前后5分钟的操作,让你快速入门Python的编程世界,各种Python和Django的概念会在实战中给你娓娓道来. Django ...
- Python3 与 C# 并发编程之~ 协程篇
3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...
- Java IO编程全解(四)——NIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...
- Java IO编程全解(六)——4种I/O的对比与选型
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7804185.html 前面讲到:Java IO编程全解(五)--AIO编程 为了防止由于对一些技术概念和术语 ...
- Java IO编程全解(五)——AIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...
- Python3 与 C# 并发编程之~进程先导篇
在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...
- Python学习札记(四十一) IO 1
参考:IO NOTE A.Pre 1.IO在计算机中指Input/Output,也就是输入和输出. 2.IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但 ...
- python3入门
简介 计算机基本概念与程序设计语言分类 python风格指南 基础语法 python3 基础语法:基本输入输出 python3 基础语法:标识符和保留字 python3 基础语法:注释 python3 ...
随机推荐
- react 传递非state给子元素的注意事项
我们是使用react的时候,其实很多情况都不需要使用state去存储值,如果不涉及页面渲染的值,我们往往可以使用 this.xxx的方式:这样可以提高组件的性能,避免不必要的 re_render 带来 ...
- objc与鸭子对象(上)
这是<objc与鸭子对象>的上半部分,<objc与鸭子对象(下)>中介绍了鸭子类型的进阶用法.依赖注入以及demo. 我是前言 鸭子类型(Duck Type)即:“当看到一只鸟 ...
- 耐克的定制页用canvas如何实现....跪求前端大神指点。
选择鞋子的鞋底 鞋底会变色,也可以添加自己定制的id,这个东西看的是用canvas做的,但是小弟确实不知道怎么去做,求大神指点一二,不胜感激! nike的定制页地址:http://store.nike ...
- Javascript执行流总结
面对各种各样的JavaScript代码,我们有时候难免会犯错.可当自己仔细研究一下,哦原来是这么回事.有时候怎么会想为什么Javascript程序会是这样执行的呢?为什么没有得到自己预期的答案呢?自己 ...
- 解决在IDEA 的Maven下 出现 Cannot access in offline mode 问题
去掉maven前面的work offline模式
- Sqlserver2008及以上使用全文索引排除干扰词 (转载)
关于SQLServer2008全文索引干扰词使用SQL SERVER 2008全文索引进行搜索 contains(Keywords, '"xx of xx*"') (注意是后面有包 ...
- MariaDB实现主从配置及读写分离(一)
一.主从复制方案 1. 在两台CentOS7虚拟机上分别部署MariaDB, 主数据库服务器IP为192.168.17.235, 从服务器IP为192.168.17.238. 从服务器通过调取主服务 ...
- jbosscache
JBossCache 讲解说明 是什么? 一个树形结构.支持集群.支持事务的缓存技术. 有什么作用? JBoss Cache是针对Java应用的企业级集群解决方案,其目的是通过缓存需要频繁访问的Jav ...
- MySQL锁(行锁、表锁、页锁、乐观锁、悲观锁等)
锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...
- git 命令行下浏览器tig使用记录
git 命令行下浏览器tig使用记录 tig 是一款优化 git 命令行的工具,使 git 命令行更加的便捷人性化 .如果用习惯了,会上瘾. 以下是一些使用记录: 安装成功后,在 Repo 文件夹下, ...