扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
python中open,get是什么意思
成都创新互联-专业网站定制、快速模板网站建设、高性价比栾城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式栾城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖栾城地区。费用合理售后完善,十余年实体公司更值得信赖。
open是Python的一个内置函数,一般用于本地文件的读写操作。用法如下。
my_file = open(file, mode, buffering, encoding, errors, newline, closefd, opener) # 打开文件
... # 读写操作。省略
my_file.colse() # 释放文件
登录后复制
open函数必须搭配.close()方法使用,先用open打开文件,然后进行读写操作,最后用.close()释放文件。open函数有八个参数,如下。
file:文件路径或文件描述符。如为文件路径则是str类型,如是文件描述符,则是一个非负整数。文件描述符使用较少,通常情况下都传入文件路径。file参数和closefd参数有关,closefd为True则file既可以传入文件路径,又可以传入文件描述符。closefd为False,则file只能传入文件描述符。这里的文件描述符应拓展理解为Unix、Linux系统的文件描述符和Windows系统的句柄。可以简单理解为,在Unix、Linux系统下叫文件描述符,在Windows系统下叫句柄。打开或新建文件时,操作系统内核会返回一个非负整数,可以用来访问指定文件,这个非负整数就是文件描述符。在Python中可以使用os模块的open函数获取其文件描述符。下面是一个例子。
图1
import os
a = os.open("data.txt", os.O_RDONLY) # 打开文件,并获取其文件描述符
file = open(a, "r") # 打开文件
print(file.read()) # 打印文件内容
file.close() # 关闭文件
# 注释1:代码运行结果如图2。
# 注释2:data.txt文件内容如图1。
登录后复制

由上例可见,file参数传入文件描述符是可以的,但注意,这只是为了举例说明,实际这样做没有什么应用价值。通常情况下,我们还是传入文件路径。
mode:操作模式,可选,str类型,默认为r。可选值包括r、r+、w、w+、a、a+、x、x+、rb、wb、ab、xb、rt、at、wt、xt这16种。乍一看比较乱,其实很好理解。基本操作模式有四种,r、w、a、x,分别代表读、写、追加、创建新文件。
r模式下只能对文件进行读取操作,不能写入。指定文件若不存在,会报错。w模式下只能对文件进行写入操作,不能读取。指定文件存在,则直接打开写入。若不存在,则先创建文件,再写入。a模式下同样只能对文件进行写入操作,不能读取。指定文件存在,则直接打开写入。若不存在,则先创建文件,再写入。
a模式和w模式的区别在于,w模式写入时会先将文件原内容清空,再写入新内容。a模式不会清空文件原内容,而是把新内容追加在原内容之后。
x模式是新建一个文件,然后只能对其进行写入操作,不能读取。x模式下,指定文件必须不存在,若已存在,则会报错。
r、w、a、x是基本的操作模式,mode参数不管指定为什么,必定是基于这四种操作模式之一。这句话怎么理解呢?刚才说了,mode参数可选,只能是上面那16种之一,可以看下,那16种值是不是都包含了r、w、a、x之一。例如rt、r+,实际都是基于r模式的变种,与单纯的r模式相比有一些功能上的改变。w、a、x也是同理。
可以看到,如果是变种,第二个字符也不是随便取的,只能是t或b或+。先说t和b。t和b控制Python读写内容的方式,是相对应的。t代表以文本方式读写,读写时以字符为单位,只能用于读写文本类型的文件,比如.txt、.log、.csv等能直接用文本编辑器打开的文件类型。b代表以二进制方式读写,读写时以字节为单位,可以用于读写所有类型的文件。这里注意一下,若使用t方式,则必须将encoding参数指定为除None以外的值。若使用b方式,则必须将encoding参数指定为None。t和b只用于控制读写方式,必须依附于r、w、a、x四种基本模式使用。即不能将mode参数指定为t或b,但可以是rt、wt、at、xt、rb、wb、ab、xb。因为open函数读写默认采用t方式,所以如果省略不写,则默认为t。即rt、wt、at、xt等价于r、w、a、x。
所以,mode参数省略不写、指定为r、指定为rt,实际是一回事,没有区别。
至于+,有点升级版的意思,好理解,但各自的含义记起来比较绕,下面用一个表格说明。
mode参数 可做操作 若文件不存在 如何处理原内容
r 只可读 报错 -
r+ 可读可写 报错 是
w 只可写 创建 是
w+ 可读可写 创建 是
a 只可写 创建 否,追加
a+ 可读可写 创建 否,追加
x 只可写 创建 -
x+ 可读可写 创建 -
buffering:缓冲设置,值可以是任意一个正整数、负整数或0,默认为-1。为负整数时,缓冲区的大小设置使用系统默认缓冲机制,具体会遵从以下两点策略。一,当mode参数为二进制模式时,采用固定块内存缓冲区方式,内存块的大小根据系统设备分配的磁盘块来决定,如果获取系统磁盘块的大小失败,就使用内部常量io.DEFAULT_BUFFER_SIZE定义的大小。一般的操作系统上,块的大小是4096或者8192字节。二,对于交互的文本文件(isatty()判断为True),采用行缓冲区的方式。其它文本文件使用跟二进制一样的方式。注意,buffering设置为任意负整数,效果都是相同的。buffering若为0,则不使用缓冲区,即缓冲区大小为0,写入和读取都是直接与磁盘对接。buffering若为1,则表示缓冲区采用行缓冲区,即只能放一行数据,遇到换行符即清空缓存,将数据写入磁盘。buffering为大于1的正整数时,这个正整数即代表缓冲区的大小,单位为字节。例如buffering=100,表示缓冲区大小为100Byte。达到100Byte即将数据写入磁盘。
encoding:打开文件所用的编码,可选,str类型,默认为None。encoding参数仅可在采用文本方式(即mode值带t)读写数据的情况下有效,二进制方式下不可指定。文本编码有很多,常用的有utf-8、ascii、gbk等。mode参数采用文本方式的情况下,若encoding指定为None,则编码为locale.getpreferredencoding(False)这行代码的返回值。在Windows下,这行代码一般返回值为cp936,。cp936指的就是gbk。
errors:编解码报错的处理模式,可选,str类型,默认为None。用于设置当open函数发生编码或解码错误时的处理方式。注意,仅当mode参数采用文本方式时有效,二进制方式下不可指定。常用的可选值有strict、ignore、replace、surrogateescape、xmlcharrefreplace、backslashreplace、namereplace等。下面分别解释下每个值的含义。
strict:编解码错误则报错,ValueError。
ignore:编解码出现错误会忽略,不报错。
replace:编解码出现错误不会报错,会用?替代要写入或读取的无法解析的数据。Python官网的说明中对替代字符的描述是such as?。所以说对无法编解码数据目前只知道会用?替代,至于是否会用其他符号代替,我不清楚。
newline:换行符设置,可选,str类型,默认为None。可选值包括None、"\r"、"\n"、"\r\n"。不同计算机操作系统所规定的换行符表示方法是不一样的,Windows采用"\r\n",MacOS采用"\r",Unix和Linux采用"\n"。newline参数就是为了规定读取文本内容时,什么才算换行符。
closefd:控制file参数的传入值类型。bool类型,默认为True。当为True时,file参数可以是表示文件路径的字符串,也可以是文件描述符。当为False时,file参数只能是文件描述符,传入字符串会报错。
opener:具体含义暂不清楚。
要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
f = open('/Users/michael/test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:
如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:
最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便;
f=open(r'C:\Users\dell\Desktop\1.txt','r')
print(f.read())
文件打开操作只是打开了文件,还需要读取文件内容才能显示文件内容
1、打开文件会用到open函数,标准的python打开文件语法如下:
open(name[,mode[,buffering]])
open函数的文件名是必须的,而模式和缓冲参数都是可选的。
2、使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。
3、猜测你可能是在使用open函数后没有close,导致文件一直处于被占用状态而无法编辑。
参考资料:
在windows下路径一般写为:“D:\data\python"
但是字符串中\是转义字符,所以你可把\写成\\,或者路径前加上r如r"D:\data\python",表面该字符串不进行转义即可
open函数
1.open函数: file=open(filename, encoding='utf-8'),open()函数是Python内置的用于对文件的读写操作,返回的是文件的流对象(而不是文件本身,所以使用的方法都是流对象的方法)。使用这个函数时可以指定encoding参数(Python2.7中不支持),因为Python代码在不同的平台环境中使用的默认编码方式不同,有可能会发生编译出错的问题。
2. filename参数:在open中的文件名参数filename中,包含的路径表示虽然可以根据不同的环境使用斜杠和反斜杠,但在Python中表路径时,斜杠都是正确的。
3. 文件操作对象file:流对象file,即open的默认模式下的返回值。使用for循环对对象file进行迭代时,每次迭代都会自动分离出一行(效果相当于对readlines结果的for循环遍历):
with创建临时运行环境
作用:with用于创建一个临时的运行环境,运行环境中的代码执行完后自动安全退出环境。
文件操作:使用open进行文件操作使建议使用with创建运行环境,可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出,即使发生错误,退出运行时环境时也能安全退出文件并给出报错信息。
with open(’/path/to/file’, ‘r’) as f:
print(f.read())
这和前面的try … finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
如果想了解跟多相关的执行可以来传智播客软件测试学习
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流