当前位置: 首页 > 图灵资讯 > 行业资讯> 详解Python中open()函数指定文件打开方式的用法

详解Python中open()函数指定文件打开方式的用法

发布时间:2025-09-25 11:01:01

当我们用open()函数打开文件时,有几种打开模式。

'r'->只读
'w'->只写,如果文件已经存在,则清空,如果不存在,则创建。
'a'->追加,写到文件末尾
'b'->打开图像、音频、word文件等二进制模式。
'+'->更新(可读可写)

这个带'+'数字有点难以理解,在代码的感觉下。

withopen('foo.txt','w+')asf:
f.write('bar\n')
f.seek(0)
data=f.read()

可以看出,上面的代码不仅可以写,还可以读。注意先定位到开头,f.seek(0),否则会读出空数据。

有些人可能会感到困惑,因为他们带'+'数字是可读可写的,那'w+'跟'r+'有什么不同?

那就是,

'w+'会清空,会创造 (如果文件已经存在,则清空,如果不存在,则创建。)

'r+'不清空,不创造

不要用二进制模式打开文本文件

先看下面代码的“怪异”现象。

假设在windows下,我有一个f.txt文件,内容如下。

hello

world

代码一

withopen('f.txt','r')asf:
printf.readlines()
withopen('f.txt','rb')asf:
printf.readlines()

输出

['hello\n','world\n']
['hello\r\n','world\r\n']

代码二

withopen('f.txt','rb')asf:
data=f.read()
withopen('f.txt','w')asf:
f.write(data)

打开文件,变成下面这样,

hello^M

world^M

首先,首先了解换行符'\n'跟回车符'\r'的概念。

'\n',换行符(LF,Line-Feed),指新的一行。
'\r',回车符(CR,Carriage-Return),回到行头。

因为不同系统下的换行标志不同。

windows->'\r\n'
unix->'\n'
mac->'\r'

这就是为什么windows下的txt在linux打开时会有'^M'。

这就是为什么我在linux下跑步脚本导出游戏数据,然后打开本地windows,变成了一行。

事实上,文本文件也是二进制文件,是文本编码的二进制文件,文本文件处理了一些看不见的字符,提高了可读性。

在python中,os可以通过.linesep获得当前系统的换行标识。例如,在windows下,os.linesep'\r\n'。

在python中操作换行标志时,直接使用'\n'Python将根据不同的系统自动转换为不同的标志。

通过以上理论依据,可以分析本文开头代码的“奇怪”现象。

在代码1中,python将用文本模式打开的文件处理为'\n',而且用二进制模式打开就原封不动了。

代码二中,用二进制模式打开,用文本模式写入。二进制打开原封不动还是'\r\n',在写入文本模式时,因为python会将'\n'转成'\r\n',所以其实就等于写了'\r\r\n',所以多了一个'^M'。

相关文章

详解Python中open()函数指定文件打开方式的用法

详解Python中open()函数指定文件打开方式的用法

2025-09-25
深入浅出讲解Python字符串格式化

深入浅出讲解Python字符串格式化

2025-09-25
一张图让你学会Python

一张图让你学会Python

2025-09-25
教你如何用Python生成随机数字和随机字符串

教你如何用Python生成随机数字和随机字符串

2025-09-25
两道简单却实用的python面试题

两道简单却实用的python面试题

2025-09-25
给Python初学者的一些技巧

给Python初学者的一些技巧

2025-09-25