python 使用 with open() as 读写文件

读文件:

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

>>> f = open('E:\python\python\test.txt', 'r')

标示符'r'表示读,这样,我们就成功地打开了一个文件。

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:

  1. f=open('E:\python\python\notfound.txt', 'r')
  2. Traceback (most recent call last):
  3. File '<stdin>', line 1, in <module>
  4. FileNotFoundError: [Errno 2] No such file or directory: 'E:\python\python\notfound.txt'

如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示

  1. >>> f.read()
  2. 'Hello, python!'

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

>>> f.close()

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

  1. try:
  2. f = open('/path/', 'r')
  3. print(f.read())
  4. finally:
  5. if f:
  6. f.close()

每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

  1. with open('/path/to/file', 'r') as f:
  2. print(f.read())

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

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

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

  1. for line in f.readlines():
  2. print(line.strip()) # 把末尾的'\n'删掉

写文件

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

  1. >>> f = open('E:\python\python\test.txt', 'w')
  2. >>> f.write('Hello, python!')
  3. >>> f.close()

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

  1. with open('E:\python\python\test.txt', 'w') as f:
  2. f.write('Hello, python!')

要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码

字符编码

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

  1. >>> f = open('E:\python\python\gbk.txt', 'r', encoding='gbk')
  2. >>> f.read()
  3. '测试'

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

>>> f = open('E:\python\python\gbk.txt', 'r', encoding='gbk', errors='ignore')

二进制文件

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

  1. >>> f = open('E:\python\python\test.jpg', 'rb')
  2. >>> f.read()
  3. b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

总结:以后读写文件尽量使用with open语句,少使用f = open()语句

对于多个文件的读写,可以写成以下两种方式:

1、

  1. with open('C:\Desktop\text.txt','r') as f:
  2. with open('C:\Desktop\text1.txt','r') as f1:
  3. with open('C:\Desktop\text2.txt','r') as f2      
  4. ........       
  5. ........       
  6. ........

2、

  1. with open(''C:\Desktop\text.txt','r') as f:
  2. ........
  3. with open(''C:\Desktop\text1.txt','r') as f1:
  4. ........
  5. with open('C:\Desktop\text2.txt','r') as f2:
  6. ........

文件的读写方式列表:

File 对象属性:

Reference:

https://www.cnblogs.com/ymjyqsx/p/6554817.html

https://www.cnblogs.com/tianyiliang/p/8192703.html

(0)

相关推荐

  • (38条消息) python读取、写入txt文本内容

    读取txt文本 python常用的读取文件函数有三种read().readline().readlines() 以读取上述txt为例,看一下三者的区别 read()    一次性读全部内容 一次性读取 ...

  • python 如何将数据写入本地txt文本文件的实现方法

      更新时间:2019年09月11日 14:34:36   作者:Frank-Han   这篇文章主要介绍了python 如何将数据写入本地txt文本文件的实现方法,文中通过示例代码介绍的非常详细,对 ...

  • 第93天:文件读写

    文件操作中最基本的当然属于文件的读写操作.当我们利用爬虫抓取到一堆数据时,就需要进行文件写操作,将数据写入到文件当中:当我们需要对抓取到的文件内容进行筛选,获取有效信息时,需要对文件进行读操作.本文将 ...

  • C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    文章来源:http://c.biancheng.net/view/2068.html 在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介 ...

  • Python骚操作,提取pdf文件中的表格数据!

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报.发行上市公告等.面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取.那么如何才能高效提取出pdf文 ...

  • 用Python自动清理电脑内重复文件,只要10行代码就够了

    给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除 主要涉及的知识点有: os模块综合应用 glob模块综合应用 利用filecmp模块比较两个文件 步骤分析 该程序实现的 ...

  • 《自拍教程78》Python 百度网盘500个文件分割

    案例故事 百度网盘非会员大量上传文件,会弹出:"上传文件数量超出500个限制,开通超级会员后可继续上传", 其实是限制拖入500张相片,并非限制上传500张. 非会员如何将众多文件 ...

  • NET问答: 有最干净利落的读写文件方式吗?

    dotNET跨平台 以下文章来源于NET技术问答 ,作者overflow NET技术问答精选 StackOverFlow 上的.NET 相关技术问题解答 咨询区 ApprenticeHacker: 在 ...

  • 用几行python代码偷偷复制U盘文件

    https://www.cnblogs.com/dawning666/articles/9433907.html 前言 上大学的时候有老师不给上课的PPT,就总想有个程序能偷偷复制老师的U盘....一 ...

  • python 代码如何打包成.exe文件(Pyinstaller)

    前言 python写的代码如何打包成.exe可执行程序,让别人电脑上没安装过 python 的小伙伴也可以直接运行? 本篇讲如何用PyInstaller库一步步打包python代码. PyInstal ...

  • python代码如何打包为.exe文件

    我使用的python版本为3.6,现在最新的python版本是3.7,但是pyinstaller现在还不支持最新的3.7,所以大家不要用最新版本的python,最新版本的兼容性不好.下面我们正式开始吧 ...

  • Python学习笔记(读mdb文件)

    文章目录 1. 读取一个文件夹里所有文件名字 2. 打开zip文件 3. 读.mdb文件 3.1 成功运行的代码 3.2 关于win_connet_mdb与connect 3.3 遇到的问题 3.4 ...