python读写文件的三种做法

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

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

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

mode参数有:

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

举例:

f = open('dt.txt', 'r')

print(f.read())

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

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

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

UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 30: illegal multibyte sequence

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

f = open('tes.txt', 'r', encoding='utf-8')
print(f.read())

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

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

f.close()

2. os.open(): 用于比较低级的方式去读取文件,是python的os模块提供的函数,以文件路径和模式为参数,返回文件描述符。

os.open(path, flags[,mode])

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

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

举例:

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()也需要关闭文件,释放系统资源。

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

举例:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值