《手把手陪您学Python》31——文件的打开

在上一篇《手把手陪您学Python》30——模块中,我们学习了通过导入模块调用其他文件中的函数的方法,这也是我们第一次实现了跨程序或者说跨文件的操作。

接下来,我们将要进一步学习如何通过Python去操作其他文件,包括打开文件、读取文件、关闭文件、写入文件和存储文件等等。Python处理文件非常简单,这也是Python在文本和文件处理领域非常流行的原因。

为了便于今天以及后面几篇内容的讲解和演示,我们要自己先制作一个文本文件,作为贯穿我们后面几篇文章的示例文件。文本文件的内容大家可以随意制作,我这里就用《手把手陪您学Python》这一系列文章的部分标题作为内容,制作了一份文本文件contents.txt,其中已经写入的内容为:

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

大家可以通过关注“亦说Python”公众号,回复“手31”,下载这份文件以及本篇文章的实例程序。

下面,就开始介绍Python处理文件的基本操作。

1、文件路径

要读取一个文件,首先要知道文件在哪里。

a、相同文件夹

Python会默认现在程序所在的文件夹寻找,如果程序文件和目标文件在一个文件夹,那么是不需要告诉Python目标文件的路径的,只需要直接使用文件名contents.txt,Python就能够读取。

b、下级文件夹

如果目标文件在程序文件所在文件夹的下级(包括下一级或下多级),就可以使用“相对路径”。

比如,程序文件所在的文件夹为python,目标文件在python文件夹里的lesson文件夹里的text文件夹中。此时,目标文件的相对路径就是“lesson/text/contents.txt”。这时,不仅要告诉Python目标文件的文件名称是什么,还要告诉Python目标文件相对于程序文件的位置在哪里。

这里需要注意的是,Windows系统中的文件路径是使用反斜杠“\”来区分不同层级文件夹的,但在Python程序中,是可以使用斜杠“/”来表示的。如果也要使用反斜杠来表示的话,要注意不能直接使用反斜杠“\”,因为在Python中反斜杠是表示转义的。

如果文件路径中有t或者n开头的文件夹(比如C:\python\new\text.txt),与反斜杠组合起来时,\n以及\t会被Python解读为回行或者制表符的。所以当使用反斜杠显示文件地址时,最好对路径中的每一个反斜杠都用反斜杠进行转义,避免出现意外转义的情况(比如C:\\python\\new\\text.txt)。

c、其他文件夹

如果目标文件在程序文件的上级或者其他文件夹中,那么就需要使用“绝对路径”了。绝对路径就是我们文件存储的完整地址和准确位置,和地址栏的地址一样。

这时,就要告诉Python,目标文件的路径为“D:\study\python\contents.txt”。

需要记住的一点是,绝对路径可以代替相对路径使用,但相对路径不能代替绝对路径使用。

2、打开文件

知道了文件位置就可以使用Python的内建函数open()打开文件了。

a、open()

open()中的必须参数是目标文件的文件名(包括路径),其他可选参数含义及完整的语法格式为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中:

file: 必需,文件路径(相对或者绝对路径)

mode: 可选,文件打开模式

buffering: 设置缓冲

encoding: 一般使用utf8

errors: 报错级别

newline: 区分换行符

closefd: 传入的file参数类型

opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符

b、mode参数

在可选参数中,最主要的是文件打开模式mode,默认值为“r”,也就是以只读方式打开的,其他常用模式包括:

模式

描述

r

只读模式 (默认)。

w

只写模式,创建新文件(清除路径下的同名文件中的数据)。

x

只写模式,创建新文件,但存在同名路径时会创建失败。

a

添加到已经存在的文件(如果不存在就创建)。

r+

读写模式。

b

二进制文件的模式,添加到别的模式中(比如“rb”或“wb”)。

t

文件的文本模式(自动将字节解码为Unicode),可以添加到别的模式中(比如“rt”或“xt”)。

在本篇文章中,我们会选取其中几种较为常用的模式进行举例,其他未涉及的文件打开模式,大家可以自行编写实例进行测试。

c、encoding参数

另外一个可能会用到的参数是encoding。encoding是编码的意思,就是当我们要打开的文件编码格式,与我们编译器所用编码格式不一致时,需要增加的一个参数项,一般使用“encoding = 'utf-8'”作为关键字参数增加到open()函数中即可。

当我们的目标文件中只有英文字母、数字、字符时,一般是不需要添加这个参数的。如果目标文件中含有中文字符,不但要使用这个参数,而且要注意在我们制作目标文件时,要将编码模式改为UTF-8之后再保存,否则就可能出现无法解码的情况。此时,即使使用“encoding = 'utf-8'”,也会因为目标文件本身不是UTF-8格式的而无法打开。

 

图片

d、打开文件

学习了如何打开文件的open()函数后,我们就可以写出下面的代码打开我们的目标文件了:

In [1]: path = 'lesson/text/contents.txt'   # 相对路径,其他方式请大家自行练习
        file_object = open(path, encoding = 'utf-8')   # 默认mode = 'r'

由于相对路径和绝对路径一般比较长,所以习惯上会将路径赋值给path或者filename变量,再作为open()的函数。当然也可以直接将路径作为参数,特别是直接使用目标文件的文件名时,就可以直接作为open()的参数了。需要注意的是,无论是使用路径还是文件名,都要写成字符串的形式。

打开文件后我们是否就可以读取了呢?

让我们打印一下刚才打开的文件file_object,看看是不是目标文件的内容:

In [2]: path = 'lesson/text/contents.txt'
        file_object = open(path, encoding = 'utf-8')
        print(file_object)
Out[2]: <_io.TextIOWrapper name='lesson/text/contents.txt' mode='r' encoding='utf-8'>

可以看到,返回的结果并不是目标文件的内容,而是一个迭代器。也就是说,open()函数将目标文件打开后,只返回了一个可以用来遍历的数据,这点会在我们下一篇介绍的逐行读取文件时有所体会,而目标文件中的内容,还需要靠其他方式才能读取。

下一篇,我们就将重点讲解文件读取的几种方法,敬请关注。

 

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环的终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第一阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

《手把手陪您学Python》28——自定义函数的返回值

《手把手陪您学Python》29——匿名函数

《手把手陪您学Python》30——模块

For Fans:关注“亦说Python”公众号,回复“手31”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值