open函数-打开文件并返回文件对象

描述

    1. open() 函数的作用
    1. open函数语法参考
    1. open()函数参数说明
      1. file参数
      1. encoding 参数
      1. errors参数
      1. mode参数
    1. mode参数详解
      1. 准备工作
      1. w 写入模式
      1. a 追加模式
      1. r 只读模式
    1. 总结
      1. 代码总结
      1. 路径的转义
      1. mode模式
      1. 图片总结

1. open() 函数的作用

open[ˈəʊpən]:打开。

open的中文释义是打开。

open( )函数的作用是打开文件。

【返回值】

open函数返回的是一个文件对象。

2. open函数语法参考

open 函数语法如下:

open(file, mode='r', encoding='None', errors='None')

file[faɪl]:文件。

mode[məʊd]:模式。

encoding[ɪnˈkəʊdɪŋ]:编码。

errors[ˈerəz]:错误。

none [nʌn]:没有。

open( )函数中的参数还有很多,这里介绍4个常用参数。

3. open()函数参数说明

1. file参数

file[faɪl]:文件。

file 是必需参数。

参数file 表示要打开文件的路径。

路径可以是绝对路径,也可以是相对路径。

绝对路径是指文件在硬盘上真正存在的路径。

相对路径是针对当前文件夹这一参考对象,来描述文件路径的形式。

参考《68.Python的相对路径》。

2. encoding 参数

encoding[ɪnˈkəʊdɪŋ]:编码。

参数 encoding 表示文件的编码方式,文件编码方式一般为 'utf-8'。

为了避免程序报错或者读取到的内容出现乱码,需要把 encoding 设置为 'utf-8',即写为 encoding='utf-8'。

编码的详细知识,以后在做详细介绍。

3. errors参数

errors 参数表示读写文件时碰到错误的报错级别。

strict [strɪkt]:严格的。

strict:严格级别。字符编码有报错即抛出异常。也是默认级别,errors 参数值传入None 即按此级别抛出异常。

ignore [ɪɡˈnɔː]:忽视、忽略。

ignore:忽略级别。字符编号有错误,忽略掉。

推荐errors参数的取值为'ignore',表示在遇到编码错误时忽略该错误,程序会继续执行,不会退出。

replace [rɪˈpleɪs]:替代。

replace:替换级别,字符编码有错的,替换成?。

4. mode参数

mode[məʊd]:模式。

mode 是可选参数。

参数mode决定了打开文件的模式。

r:以只读模式打开文件。

t:以文本文件模式打开文件。

b:以二进制文件文件模式打开文件。

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

x:以独占创建模式打开文件,如果文件不存在,则创建并以写入模式打开;如果文件已存在,则引发FileExistsError异常。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

+:以更新(读写)模式打开文件,必须与r、w或a组合使用,才能设置文件为读写模式。

这些字符可以进行组合,以表示不同类型的文件的打开模式,如下表所示。

Open

69-1mode模式

【备注】上图来源于《看漫画学Python》。

【温馨提示】

参数 mode 可以不写,不写时mode默认值为r,即只读模式。

4. mode参数详解

1. 准备工作

  1. 我在D盘里新建一个文件夹命名为69
  2. 我的69文件夹中有1个名为img的文件夹,有1个名为69的ipynb文件。(img文件夹是我存储图片用的,大家可以不用理会)

vscode编辑器资源管理器中的目录如下所示:

Open

69-2

硬盘中的目录如下所示:

Open

69-3

  1. 我的代码在名为69的ipynb文件中编写。
  2. 我用的vscode编辑器,编辑器打开的文件夹为69

【备注】

编辑器打开的文件夹不同,则相对路径不同。

2. w 写入模式

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

【语法解析】

  1. 文件不存在,则创建文件。
  2. 文件存在,则覆盖文件的内容。

以绝对路径,w只写模式打开文件:

f = open ("D:\\\\69\\成绩1.txt", "w", encoding="utf-8")

以相对路径,w只写模式打开文件:

f = open ("成绩2.txt", "w", encoding="utf-8")

【代码解析】

f 是变量名,接收open 函数返回的文件对象;

"D:\\\\69\\成绩1.txt"是文件的绝对路径。

"成绩2.txt"是文件的相对路径。

w表示只写模式。

w 模式下,文件存在则打开文件,文件不存在则新建文件。

我们在准备工作时是没有新建过txt文件,因此成绩1.txt成绩2.txt文件此时不存在。

不存在则新建一个文件。

因此,运行代码后我们观察资源管理器目录或者69文件夹,我们发现多了成绩1.txt成绩2.txt2个文件。

Open

69-4

这就是文件不存在则新建文件的意思。

【课堂练习】

修改路径参数,用绝对路径的方法在桌面新建一个名为测试.txt的文件。

不知道桌面的绝对路径的可以用【shift】方法随便查看一个桌面文件的绝对路径。

下面就是我查看的桌面某个文件的路径:

"C:\\Users\\xiaoyuzhou\\Desktop\\空.docx"

参照上面的代码修改路径参数,代码如下:

f = open ("C:\\Users\\xiaoyuzhou\\Desktop\\测试.txt", "w", encoding="utf-8" )

【终端输出】

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \\UXXXXXXXX escape

运行上面的代码,程序报错。

程序报错,我们首先考虑路径参数转义字符问题。

将路径参数中的所有\\都多加上一个反斜杠\\,修改如下:

f = open ("C:\\\\Users\\\\xiaoyuzhou\\\\Desktop\\\\测试.txt", 
"w", 
encoding="utf-8" )

运行代码后,我们发现程序能够正常运行。

我们查看电脑桌面,发现电脑桌面多了一个名为测试.txt的文件。

但我们发现增加斜杆的方法实在太麻烦,那有没有其它简便的方法呢?

其实我们可以通过在路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行转义了。

【路径参数前增加一个r】

f = open (r"C:\\Users\\xiaoyuzhou\\Desktop\\测试1.txt", 
"w", 
encoding="utf-8" )

【路径参数前增加一个R】

f = open (R"C:\\Users\\xiaoyuzhou\\Desktop\\测试2.txt", 
"w", 
encoding="utf-8" )

大家观察电脑桌面,我们就成功的新建了测试1.txt测试2.txt2个文件。

我们继续讲解w模式的如果文件存在,则覆盖文件的内容。

我们刚才新建了成绩1.txt成绩2.txt2个文件。

那如果文件存在,则w模式可以直接写入。

成绩1.txt中写入张三,90分

f = open ("成绩1.txt", "w", encoding="utf-8")
f.write("张三,90分")
f.close( )

上述代码的作用是将张三,90分写入到文件成绩1.txt中。

【代码解析】

f = open ("成绩1.txt", "w", encoding="utf-8")

f 是变量名,接收open函数返回的文件对象。

"成绩1.txt"是open函数的file参数,表示文件的相对路径;

"w"是open函数的mode参数,表示只写模式;

encoding表示字符编码格式为utf-8

f.write("张三,90分")

上述代码的作用是将张三,90分写入到文件对象中,即写入到成绩1.txt

【将内容写入文件的语法】

f.write(obj)

f 是文件对象,就是一个变量名,你可以自己命名。

文件对象后紧跟一个英文小圆点.

write是方法名。

obj为要写入的内容,这里要写入的内容是张三,90分

运行代码后,大家查看成绩1.txt文件,如下所示:

Open

69-5

【关闭文件语法】

f.close( )

f 是变量名,接收open函数返回的文件对象。

文件对象后紧跟一个英文小圆点.

close是方法名。

【温馨提示】

大家在Python中操作文件时,注意读写完毕后都要进行关闭。这根我们日常生活中的操作是一样的,不关闭文件,我们是没办法对文件进行删除的。

上面代码我们完成了写入功能,下面我们讲解覆盖文件的内容的含义:

【覆盖文件的内容】

再执行下面的代码之前,大家先打开成绩1.txt,确定文件里的内容为张三,90分

下面的代码要实现的功能是将李四,60分写入文件成绩1.txt

f = open ("成绩1.txt", "w", encoding="utf-8")
f.write("李四,60分")
f.close()

运行上面的代码后,我们再观察成绩1.txt文件,如下所示:

Open

69-6

之前的张三,90分内容被覆盖了,只保留了最后1次写入的内容,这就是覆盖文件内容的意思。

【知识回顾】

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

那如果我不想删除文件本来就存在的内容,怎么办呢。

我们可以采用追加模式。

3. a 追加模式

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

a追加模式w只写模式的区别在于追加模式保留原有内容,只写模式覆盖原有内容。

  1. 将mode参数修改为a
  2. 写入内容为王五,77分
f = open ("成绩1.txt", "a", encoding="utf-8")
f.write("王五,77分")
f.close()

打开成绩1.txt,如下图所示:

Open

69-7

打开成绩1.txt可以看到王五,77分已经写入到文件中,且原有的内容李四,60分依然存在,这就是追加模式。

但大家发现我们写入的内容和原本的内容之间没有符号作为间隔,不方便我们观看。那该如何修改呢?

我们采用转义字符的方法可以解决上述问题。

\\n可以实现换行功能:

f = open ("成绩1.txt", "a", encoding="utf-8")
f.write("\\n赵六,66分")
f.close()

输入后如下图所示:

Open

69-8

【转义字符】

Open

69-9转义字符

【备注】上图来源于《风变编程》。

4. r 只读模式

r:以只读模式打开文件。

只能打开已经存在的文件。

如果文件不存在,程序不会创建新的文件,会报错。

f = open ("成绩9.txt", "r", encoding="utf-8")

【终端输出】

FileNotFoundError: [Errno 2] No such file or directory: '成绩9.txt'

[Errno 2] No such file or directory: '成绩9.txt' :没有这样的文件或目录: '成绩9.txt '

f = open ("成绩1.txt", "r", encoding="utf-8")
f.close()

运行上述的代码,成绩1.txt文件其实已被我们成功打开。

但Python中的打开和我们日常生活中的打开不是一个含义。

我们工作中的打开,肉眼是可以看到一个具体的文档的。

Python中的打开,其实就是得到一个文件对象,方便我们后续操作文件,这个文件对象我们肉眼是看不见的。

有时候我们并不需要对文件进行写的操作,我们只需要打开文件即只读模式,此时我们的第二个参数mode 就为r,注意,r也可以不写。

mode 参数就讲解到这里,剩下的模式将不再进行赘述。

5. 总结

1. 代码总结

# w只写模式
f = open ("花名册.doc", "w", encoding="utf-8")
f.write("王小溪")

# a追加模式
f = open ("花名册.doc", "a", encoding="utf-8")
f.write("\\n李华华")

# r只读模式
f = open ("花名册.doc", "r", encoding="utf-8")

# 关闭文件
f.close()

2. 路径的转义

绝对路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行转义了。

3. mode模式

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

r:以只读模式打开文件。

4. 图片总结

Open

69-10. open函数

【温馨提示】

如果初学者在本节的代码遇到报错,基本是file路径参数的错误,建议大家回看相对路径的相关知识,相对路径是非常重要的一个知识点,这个知识点不掌握,后面将寸步难行。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分