Python学习: with open()、os.open()、open()的详细使用
1.读写文件背景
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘。
读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
2.open()、with open()
打开文件
要以读文件的模式打开一个文件对象,使用Python内置的 open() 函数,传入文件名和标示符:
f = open('/Users/michael/test.txt', mode='r')
标示符 ‘r’ 表示只读,这样,我们就成功地打开了一个文件。
如果文件不存在, open() 函数就会抛出一个 IOError 的错误,并且给出错误码和详细的信息告诉你文件不存在:
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
mode的各种模式
模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
---|---|---|---|
r | 只读 | error | - |
r+ | 读写 | error | T |
w | 只写 | create | T |
w+ | 读写 | create | T |
a | 只写 | create | F,尾部追加写 |
a+ | 读写 | create | F,尾部追加写 |
wb | 只写二进制字符串,写入bytes | create | T |
rb | 只读二进制字符串,返回bytes | error | - |
3.读文件
如果文件打开成功,接下来,调用 read() 方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:
>>> f.read()
'Hello, world!'
最后一步是调用 close() 方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
>>> f.close()
4.关闭文件
由于文件读写时都有可能产生 IOError ,一旦出错,后面的 f.close() 就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用 try … finally 来实现:
try:f = open('/path/to/file', 'r')print(f.read())
finally:if f:f.close()
但因为每次这样写太繁琐了,所以Python引入了 with open() 来自动调用close()方法,无论是否出错
open() 与 with open() 区别
1、open需要主动调用close(),with不需要
2、open读取文件时发生异常,没有任何处理,with有很好的处理上下文产生的异常
用with同时操作多个文件
with open("test/test.py", 'r') as f1, open("test/test2.py", 'r') as f2:print(f1.read())print(f2.read())
5.写文件
写文件和读文件是一样的,唯一区别是调用 open() 函数时,需要将 mode 参数改成可写的模式,如上面的表格所示
f = open("test/test.py", "a+")
f.write("test")
f.writelines("polo")
print(f.read())
f.close()
你可以反复调用 write() 来写入文件,但是务必要调用 f.close() 来关闭文件。
写文件的原理
当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。
只有调用 close() 方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。
所以,还是用with语句好鸭!
with open("test/test.py", "a+") as f:f.write("test")
6.关于字符编码
要写入特定编码的文本文件,请给 open() 函数传入 encoding 参数,将字符串自动转换成指定编码,默认 encoding=None
例如,读取utf-8编码的文件:
f = open('test/utf8.txt', 'r', encoding='utf-8')
print(f.read())
遇到有些编码不规范的文件,你可能会遇到 UnicodeDecodeError ,因为在文本文件中可能夹杂了一些非法编码的字符。
遇到这种情况, open() 函数还接收一个 errors 参数,默认是 errors=None 表示如果遇到编码错误后如何处理。最简单的方式是直接忽略
f = open('test/utf8.txt', 'r', encoding='utf-8', errors='ignore')
划重点!!!墙裂建议使用with open()
Python学习: with open()、os.open()、open()的详细使用相关推荐
- 【Python学习教程】:装饰器的详细教程,通俗易懂
装饰器是Python中的一个重要概念,多用于在不修改原函数的基础上,为函数增加额外的功能. 基础装饰器 例如小李给女朋友买了一款iPhone12作为生日礼物,手机原封未拆封. def gift():p ...
- Python学习日记(十七) os模块和sys模块
os模块 1.os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) #C:\Users\Administrator\ ...
- python学习笔记二
1 正则 1-1 普通字符 s1 = 'asd25454655js6565askJ\nNKJLasd5165123' # 1 匹配单个大写英文字母 obj = re.compile('[A-Z]') ...
- python学习笔记 os.scandir遍历目录
python学习笔记 os.scandir遍历目录 之前尝试用os.walk进行遍历目录,前几天看有人说os.scandir比walk更高效,尝试了一下,写了两端代码,做了一个测试 第一段用walk也 ...
- Python学习笔记四(Python OS模块)
Python os模块提供了一个统一的操作系统接口函数,通过python os模块可以实现对系统本身的命令,文件,目录进行操作,官方参考文档( http://docs.python.org/libra ...
- python的os模块使用_Python学习笔记之os模块使用总结
#!/usr/bin/env python ##-*- coding: utf-8 -*- import os print "n欢迎大家跟我一起学Python"; system=o ...
- python学习------tab补全
python学习------tab补全 python也可以进行tab键补全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/env ...
- Python学习系列(六)(模块)
Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...
- python学习之第二课时--运行程序和字符编码
python学习之第二课时--运行程序和字符编码 python的运行方式 Windows的终端运行方式: [右键点击开始键]--->[运行输入cmd]---> ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
最新文章
- Bash Shell脚本编程-变量知识
- .NET程序员迈向卓越的必由之路
- c语言怎么输入学号姓名,c语言如何输入编号和姓名
- trie树- 转自 维基百科
- canvas使用技巧大全
- Algorithms_算法专项_Hash算法的原理哈希冲突的解决办法
- Android 实现 欢迎界面 自动跳转 到 主界面
- 面试不再尬聊的Mysql数据库优化方案
- 类似于失落之城的解谜游戏都有哪些
- 联想服务器控制口登录地址_常用服务器管理口IP及账号密码(持续更新)
- DIY一个UNISOLDER焊台无线红外休眠座
- win10无法访问共享解决办法
- Keil 4 安装教程及简单使用【嵌入式系统】
- centos7启动服务uthorization not available. Check if polkit service is running or see debug message for
- Python中计算圆的周长,面积
- js-图片的轮播-设置主要界面-和鼠标点击进行切换图片
- linux赋予普通用户root,Linux --赋予普通用户root 权限
- PDF 与 PS页面描述语言与PDF文件解析(转)
- Ubuntu下 .Desktop文件设置
- 阿里云网站备案期间对网站访问的影响