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()是文件操作的最佳选择,建议在需要进行文件操作时多多使用。

相关推荐
AI蜗牛之家3 小时前
Qwen系列之Qwen3解读:最强开源模型的细节拆解
人工智能·python
C++ 老炮儿的技术栈3 小时前
UDP 与 TCP 的区别是什么?
开发语言·c++·windows·算法·visual studio
wgslucky3 小时前
Dubbo报错:module java.base does not “opens java.lang“ to unnamed module
java·开发语言·dubbo
whyeekkk4 小时前
python打卡第48天
开发语言·python
DougLiang5 小时前
关于easyexcel动态下拉选问题处理
java·开发语言
全职计算机毕业设计5 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
5:006 小时前
云备份项目
linux·开发语言·c++
Eiceblue6 小时前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf
weixin_527550406 小时前
初级程序员入门指南
javascript·python·算法
笨笨马甲6 小时前
Qt Quick模块功能及架构
开发语言·qt