python读写文件的三种做法

对于文件操作,python提供了3种做法:open(), os.open() 和with open()语句。

  1. open()函数:一般用于更高级的文件读写操作,即人能读懂的用法,如果是写入数据,可用传入字符串。

用法:open(path, mode) 以给定的路径和模式去打开文件,返回一个文件对象。

mode参数有:

|----|------------------|---------------|---------|
| 模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
| r | 只读 | error | - |
| r+ | 读写 | error | T |
| w | 只写 | create | T |
| w+ | 读写 | create | T |
| a | 只写 | createF,尾部追加写 | |
| a+ | 读写 | create | F,尾部追加写 |
| wb | 只写二进制字符串,写入bytes | creT | |
| rb | 只读二进制字符串,返回bytes | error | - |

举例:

python 复制代码
f = open('dt.txt', 'r')

print(f.read())

输出:
hello, world!ifu mark. hello test.

如果文件不存在,则会报IOError

读取文件时,注意字符集的设置。如果文件本身编码为gbk时,直接读取会报错

python 复制代码
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 30: illegal multibyte sequence

这时需要将文件编码设置为encoding='utf-8', 这样再读取文件就不会报错了。

python 复制代码
f = open('tes.txt', 'r', encoding='utf-8')
print(f.read())

输出:
hello, world!ifu mark. hello test.
长江黄河都源远流长。

关闭文件:使用open()函数必须关闭文件,否则将会一直占有系统资源。但同时打开的文件数量有限,所以要及时把文件关闭。

python 复制代码
f.close()
  1. os.open(): 用于比较低级的方式去读取文件,是python的os模块提供的函数,以文件路径和模式为参数,返回文件描述符。
python 复制代码
os.open(path, flags[,mode])

flags: 这个参数可以是以下选项,多个可用|隔开,常用的有

  • os.O_RONLY: 以只读方式打开
  • os.O_WRONLY: 以只写方式打开
  • os.O_RDWR: 以读写方式打开
  • os.O_APPEND: 以追加方式打开
  • os.O_CREAT: 创建并打开一个新文件

举例:

python 复制代码
f = os.open('dt.txt', os.O_RDWR|os.O_CREAT)
str = '长江永远是母亲河!'
s = bytes(str)
os.write(f, s)
os.close()

注意:如果直接写入字符串,会报错a bytes-like object is required, not 'str',需要提前把字符串转成bytes才能成功写入文件。

与open()一样,os.open()也需要关闭文件,释放系统资源。

  1. with open()语句:这句话实际是对open() 和 close()函数的组合。它把文件的打开和关闭集中在了一起。

举例:

python 复制代码
with open('dt.txt', 'r', encoding='utf-8') as f1, open('tes.txt', 'r', encoding='utf-8') as f2:
    print(f1.read())
    print(f2.read())

输出:
hello, world!ifu mark. hello test.
hello, world!ifu mark. hello test.
长江黄河都源远流长。

同样:为了避免打开文件出现UnicodeDecodeError, 建议加上encoding='utf-8'这个参数。

4.异同点与最优选择:open()和os.open()函数不会自动关闭文件,而with open()语句会自动关闭文件,不会造成资源泄露的问题。

  • open()和with open()函数是进行文件读取的常见操作,尤其是对于简单的文件读和写。
  • 需要以低级别方式操作文件时,才使用os.open(),它更适用于特定的场景,如需要在文件中定位和读取特定位置的数据。
  • 在使用with open()语句读取文件时,可以在语句块中进行其他的文件操作,如写入内容或定位文件指针位置。

综上,with open()是文件操作的最佳选择,建议在需要进行文件操作时多多使用。

相关推荐
1024奇点1 分钟前
【仓颉语言入门 · 第二篇 第 12 课】
开发语言·数据库·ide·mysql·开源
LDR0065 分钟前
LDR6100 智能遥控器精品软文:Type-C 充电口与低功耗量产维护
c语言·开发语言
工具派34 分钟前
PDF签名贴上去为什么发虚?尺寸、DPI与坐标的边界实测
java·python·pdf
iCxhust36 分钟前
MATLAB SPWM仿真
开发语言·matlab
谙忆1 小时前
PNG改成ICO为什么不能用:用Python检查多尺寸目录与256px帧
开发语言·python
长空任鸟飞_阿康1 小时前
如何设计支持 Skills 的 Agent?一套可扩展的四层架构
python·ai·架构·skills
滴啦嘟啦哒1 小时前
【具身笔记】【原理探究】一、对PI05源码的实践笔记
笔记·python·vla·具身
青峰讲运维1 小时前
OpenStack 存储深度解析|Cinder 块存储 + Swift 对象存储原理与完整实操(Yoga)
开发语言·openstack·swift
miofly1 小时前
GitHub 今日推荐|elephant-goldfish-model:先审查设计草案再写代码
python·开源·github
汤姆宝库1 小时前
具身智能深拆:VLA、世界模型与数据飞轮
开发语言·人工智能·php