1、文件读写

# IO编程
# 文件读写f = open('text.txt','r') # 标示符'r'表示读
str = f.read()
print(str)
f.close()

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在。最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

try:f = open('text.txt','r')print(f.read())
finally:if f:f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
这和前面的try … finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

with open('text.txt','r') as f:for line in f.readlines():print(line.strip()) # 把末尾的'\n'删掉

前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用’rb’模式打开文件即可:

f = open('test.jpg','rb') # 二进制
print(f.read())

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

f = open('test1.txt','r',encoding='gbk',errors='ignore')
print(f.read())

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:

with open('test1.txt','w') as f:f.write('hello pengyao!')  # w  替换掉原来文件中的内容with open('test1.txt','a') as f:  # a  追加在原来的内容后面f.write('abcd')

你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险。使用with语句操作文件IO是个好习惯。

2、StringIO BytesIO

StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。

from io import StringIO
f = StringIO()
print(f.write('hello py1 '))  # 10
print(f.write('hello py2 '))  # 10
print(f.write('hello py3 '))  # 10
print(f.getvalue()) # hello py1 hello py2 hello py3
from io import StringIO
f = StringIO('Hello!\nHi!\nGoodbye!')
print(f.read())

StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO

from io import BytesIO f = BytesIO() print(f.write('中文'.encode('utf-8')))
# 请注意,写入的不是str,而是经过UTF-8编码的bytesprint(f.getvalue()) # b'\xe4\xb8\xad\xe6\x96\x87'

运行结果:

python IO编程相关推荐

  1. python import io_详解Python IO编程

    文件读写 读文件 try: # windows下utf8 f = open('./README.md', 'r', encoding='utf8', errors='ignore') print(f. ...

  2. Python IO编程-组织文件

    对于日常中遇到的批量任务,有些可以通过请求python完成自动化,我非常渴望拥有这些能力,在去年学习了python读写文件之后,我马上迫不及待的开始学习'组织文件',经过学习,我发现python组织文 ...

  3. python IO编程-StringIO和BytesIO

    链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319187857 ...

  4. Python IO编程——文件读写

    1.1   文件读写 1.1.1   读文件 >>> f = open('/root/python/hello.py','r')    #标识符r表示读 >>> f ...

  5. Python IO编程详解

    一.文件系统操作 1.os.os.path和pathlib的对比 Python中处理文件路径和文件系统操作的传统方式,是通过os和os.path模块中的函数来完成的.这些函数完全能够胜任需求,但往往会 ...

  6. python学习——IO编程——文件读写

    python--IO编程--文件读写 IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动.Input Stream就是数据从外面(磁盘.网络 ...

  7. Python学习笔记十 IO编程

    参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 IO编程 I ...

  8. python程序官方网站-IO编程

    IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...

  9. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

最新文章

  1. OSPF:MTU不一致导致的邻接关系问题
  2. Objective-C中.h、.m、.mm的区别
  3. Leetcode - 347. Top K Frequent Elements(堆排序)
  4. 生产环境子域降级记录
  5. es删除数据_面试官是怎么来考察你对ES搜索引擎的理解?
  6. Spring Cloud文档阅读笔记-初识Spring Cloud(对Spring Cloud初步了解)
  7. Excel删除重复数据
  8. 程序员穿衣是怎么变得越来越丑的
  9. 2.2 获取图像感兴趣区域_超火的机器视觉OpenCVSharp学习笔记3——图像形态学处理...
  10. JeecgBoot框架学习
  11. SOME/IP报文格式-Payload
  12. Matlab归一化方法
  13. AutoCAD .Net 创建Ribbon界面(一)
  14. 最难学的5种编程语言排行
  15. 在文档中怎么画横线实线_怎样在一个word文档中添加一根实线,用作分开不同
  16. 华为云nbiot接入示例_nbiot
  17. Fansblog  HDU-6608(费马小定理、威尔逊定理)
  18. 全球10大B2B电子商务平台排行,这个网站只排第三!
  19. Entropy attack——hash函数的熵攻击
  20. 拼多多子账号怎样设置?别人可操作吗

热门文章

  1. 使用latex画好看的深度学习模型图(基于Windows平台)
  2. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频
  3. java8-stream新特性详解及实战
  4. 2021-06-22 离散数学图论复习笔记
  5. [解决方法]Your project file doesn't list 'win' as a RuntimeIdentifier.
  6. Opencv Python图像处理进阶教程②
  7. 麒麟服务器v10系统安装时报错,银河麒麟V10服务器版本编译安装php7.2.12
  8. 人工智能学习(八斗学院)
  9. GB28181语音对讲对接华为IVS平台遇到的坑和解决办法
  10. C语言刷题系列——5.使用函数判断完全平方数