python文件读写,以后就用with open语句

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。

读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

读文件

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:>>> f = open('/Users/michael/test.txt','r')

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

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:>>> f=open('/Users/michael/notfound.txt','r')

Traceback (most recent call last):

File "", line 1,inFileNotFoundError: [Errno 2] No such fileordirectory:'/Users/michael/notfound.txt'

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

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

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

f = open('/path/to/file','r')

print(f.read())finally:

if f:

f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:with open('/path/to/file','r') as f:

print(f.read())

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

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

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

print(line.strip())# 把末尾的'\n'删掉

写文件

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

>>> f = open('/Users/michael/test.txt','w')>>> f.write('Hello, world!')>>> f.close()

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

f.write('Hello, world!')

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

字符编码

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:>>> f = open('/Users/michael/gbk.txt','r', encoding='gbk')>>> f.read()'测试'

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

二进制文件

前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可:>>> f = open('/Users/michael/test.jpg','rb')>>> f.read()

b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...'# 十六进制表示的字节

总结:以后读写文件都使用with open语句,不要再像以前那样用f = open()这种语句了。

python进不去怎么办_python写文件有时候写不进去怎么办相关推荐

  1. python文件是怎么写_python头文件怎么写

    本文主要以python2为例.首先介绍一下Python头文件的编程风格,然后再给大家详细介绍import部分的基本用法.这两个部分就是Python中头文件的组成模块. 编程风格#!/usr/bin/e ...

  2. python有头文件吗_python头文件怎么写

    1.python编辑时可以不要头文件吗 win下py代码,头文件是#-*-encoding:utf-8-*-,是告诉python解释器, 应该以utf-8编码来解释py文件, 对于python 2.6 ...

  3. python解释器可以使用什么命令_python解释器用什么写的

    python解释器是用什么语言实现的 用的是python解释器. 首先win+R 运行cmd,如果 python version不报错,则表明环境正确 python file.name运行即可我的故里 ...

  4. python查找关键字所属行_Python查找文件有多牛?男默女泪!!!

    某天,隔壁大神正在看一份内核技术文档,我想研读下文档向大神"偷师",恰好我的虚拟XP桌面无法使用搜索功能,而且项目组一般是一起使用共享目录的,这就导致大量资料杂糅在一起,我要找到大 ...

  5. python基金会主席入门教程_Python基金会-文件IO操作,python,基础

    函数 功能 open 打开文件 read 读取文件 write 写文件 close 关闭文件 readline 行读取 readlines 多行读取 open方法 open方法: 打开一个文件,返回一 ...

  6. hadoop写文件 java_写文件 - Hadoop 学习手册_教程_Java开发社区

    HDFS - 写文件 1.客户端将文件写入本地磁盘的N#x4E34;时文件中 2.当临时文件大小达到一个block大小时,HDFS client通知NameNode,申请写入文件 3.NameNode ...

  7. python编程头文件_python头文件怎么写

    本文主要以python2为例.首先介绍一下Python头文件的编程风格,然后再给大家详细介绍import部分的基本用法.这两个部分就是Python中头文件的组成模块. 编程风格#!/usr/bin/e ...

  8. python删除txt指定内容_python删除文件中指定内容

    更多追问追答 追问 我按你的方法试了下,文件内容还在,没有删掉...... 追答 把你的 file.txt 贴出来,确保 20150723 在要删除行的最开始,前面不能有空格等其他任何字符. 另外, ...

  9. python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...

    问题: python脚本涉及到复制文件,而我们需要兼容Windows.linux和mac环境 (Windows和linux的路径分隔符不同:通过os.path.sep查看分隔符) 如果用[路径名+os ...

  10. python xlwt xlrd 写入一行_Python Excel文件的读写操作(xlwt xlrd xlsxwriter)

    Python语法简洁清晰,作为工作中常用的开发语言还是很强大的(废话). python关于Excel的操作提供了xlwt和xlrd两个的包作为针对Excel通用操作的支持,跨平台(Mac.Window ...

最新文章

  1. HDU 1285--确定比赛名次【拓扑排序 amp;amp; 邻接表实现】
  2. rocketmq 顺序消费_必须先理解的RocketMQ入门手册,才能再次深入解读
  3. JAVA RPC:从上手到爱不释手
  4. redis相比memcached有哪些优势?
  5. Android通过cat /sys/kernel/debug/usb/devices获取USB信息
  6. 烙饼啊烙饼{转自ITEO
  7. js 操作 iframe
  8. 牛津词典电子版txt_英语启蒙:推荐一款超火的英文词典app
  9. Linux-Windows-Mac-RabbitMQ安装教程
  10. 利用Docker一键部署若依前后端分离项目详细教程
  11. lisp语言如何画小红点_实验四、五 用AutoCADLISP语言编程绘图
  12. 在Ubuntu 16.04 使用命令行安装Nvidia CUDA-9.0以及cudnn7
  13. paip.c++ tree parse tpath解析器
  14. Simulink与Flightgear联合仿真详细教程
  15. Vue3.0中文地址文档
  16. 大数据超详细面试题汇总(附答案)
  17. windows 护眼颜色修改
  18. 端游网易我的世界服务器未响应,我的世界 PC 端游戏启动异常处理指引(2018.09.21)...
  19. 工业大数据:中国智造下的“数字新基建”
  20. 【量化交易】 量化因子 情绪类因子计算

热门文章

  1. 8.Prometheus 监控技术与实践 --- Pushgateway
  2. 26.TCP/IP 详解卷1 --- Telnet 和 Rlogin : 远程登录
  3. 18. strings
  4. 17.nginx 的 rewrite 功能
  5. 131. 理解MVC
  6. 13.地区设置(Locale Settings)
  7. 21. PHP 表单验证 - 完成表单实例
  8. Vue项目使用AES做加密
  9. 2017.10.16 模拟赛
  10. codevs 1576 最长上升子序列的线段树优化