文件保存的位置被称作路径,路径在定义时主要有两种:绝对路径和相对路径。
绝对路径是指从文件所在的驱动器名称开始描述文件的保存位置,也就是常说的C盘、D盘、F盘等,常见的绝对路径表述方式如下:
C:\documents\python\1.py
其中‘\’是目录和文件之间的分隔符,当在python中描述一个文件的路径时,需要使用字符串,但是在字符串中,'‘是转义序列符,因此在使用时,需要使用两个’'进行书写,如:
C:\\documents\\python\\1.py
如果要使用单个’‘,则可以在路径前方加上r来取消后续字符串中’'的转义特性,如:
r "C:\documents\python\1.py"
相对路径是指从当前工作目录开始描述文件的位置信息,每个程序在运行时都有一个当前的工作目录,一般来说当前目录默认为应用程序的安装目录,查看和修改当前工作目录均可以使用Python自带的os库进行设置。
查看当前目录:
import os
os.getcwd()
修改当前工作目录为’D:\python’:
os.chdir('D:\\python')
此时若当前目录下存在文件夹名为python,其中有一个1.py文件,则该文件的相对路径表示为:
\\python\\1.py
注:在windows系统中目录和文件之间使用’‘作为间隔符,在其他操作系统中使用’/'作为间隔符。
对文件的操作内容主要包括三个:打开文件、读文件和写文件、关闭文件。
文件一般是保存在外部存储器中,在进行操作时需要先将其调入内存,然后由CPU进行处理,这一调入的过程即为文件的打开过程。Python中使用open命令打开文件,同时生成一个文件对象,对该文件对象的操作即为对文件的操作,其语法格式如下:
文件对象 = open(文件路径字符串, 模式字符)
其中文件路径可以为绝对路径或相对路径,模式字符主要用于指定打开文件的类型和操作文件的方式,常见的模式字符如下:
模式字符 | 文件类型 | 操作方式 | 文件不存在时 | 是否覆盖 |
---|---|---|---|---|
‘r’ | 文本文件 | 只可读文件 | 报错 | 否 |
‘r+’ | 文本文件 | 可读可写 | 报错 | 是 |
‘w’ | 文本文件 | 只可写文件 | 新建文件 | 是 |
‘w+’ | 文本文件 | 可读可写 | 新建文件 | 是 |
‘a’ | 文本文件 | 只可写文件 | 新建文件 | 否,EOF处追加写 |
‘a+’ | 文本文件 | 可读可写 | 新建文件 | 否,EOF处追加写 |
‘rb’ | 二进制文件 | 只可读文件 | 报错 | 否 |
‘rb+’ | 二进制文件 | 可读可写 | 报错 | 是 |
‘wb’ | 二进制文件 | 只可写文件 | 新建文件 | 是 |
‘wb+’ | 二进制文件 | 可读可写 | 新建文件 | 是 |
‘ab’ | 二进制文件 | 只可写文件 | 新建文件 | 否,EOF处追加写 |
‘ab+’ | 二进制文件 | 可读可写 | 新建文件 | 否,EOF处追加写 |
上述表格中文本文件主要指只包含基本文本字符,不包含字体、大小、颜色等格式信息的文件,最常见的文件文件为.txt和.py等,除了文本文件外,其他文件如.doc、.xls等均为二进制文件,文本文件的操作较为简单,二进制文件的操作较为复杂,需要借助不同的库,下面的介绍以文本文件的操作为主。
在使用open打开文件后,文件被调入内存,此时其他的应用程序均不能操作该文件,当读写操作结束后,需要将文件保存至外部存储中,即将其更新内容同步至外部存在,此外也需要将其在内存中占用的空间进行释放,以便其他应用程序可以操作该文件,这一过程称为文件的关闭。
python中文件的关闭需要使用文件对象的close()方法来实现,其语法格式如下:
文件对象.close()
在上述内容中文件对象即为和该文件关联的内容,对该文件的任何操作都需要通过调用该文件对象的方式来实现,当使用close()关闭后,不允许对该文件对象执行任何操作。
在当前路径下存在一个1.txt文件,若要在该文件中写入内容,主要有以下两种写入方式:write()方法和writelines()方法。
write()方法
write()方法将指定的字符串写入文件当前插入点位置,多次写入时新写入的字符串和原有字符串之间不会存在分隔符,同时每次写入会返回写入的字符数,其语法格式如下:
文件对象.write(字符串内容)
writelines()方法
writelines()方法可以以序列的方式接受多个字符串作为参数,一次性写入多个字符串,其语法格式如下:
文件对象.writelines(字符串序列)
和写入内容相似,python定义了三种方法来完成文件的读取,分别是read()、readline()和readlines()方法。
read()方法
read()方法读取文件中所有的内容并作为一个字符串返回,其语法格式如下:
字符串变量 = 文件对象.read()
readline()方法
readline()方法读取文件中的当前行并作为一个字符串返回,连续多次读取则可以按顺序读取每一行内容,其语法格式如下:
字符串变量 = 文件对象.readline()
readlines()方法
readlines()方法读取文件的所有内容并作为一个列表返回,每一行内容为列表的一个元素,其语法格式如下:
字符串变量 = 文件对象.readlines()
CSV文件可以理解为用逗号分隔符或其他简单字符分隔的纯文本形式存储表格数据的文件,该文件类型一般可以用记事本、excel等程序打开。score.csv文件分别使用记事本和excel打开内容如下:
针对CSV文件,Python专门提供了内置同名模块进行读写操作,使用时需要定义reader对象和writer对象。
和文本文件相同,CSV文件可以用open命令直接打开,但是每次都需要使用close()方法关闭较为麻烦,因此引入了with语句来打开文件,每次文件操作结束后会自动关闭文件,其语法格式如下:
with open(文件路径, 模式字符) as 文件对象名:
文件操作语句
读取CSV文件需要使用csv模块首先创建一个reader对象,然后通过迭代遍历reader对象的方式来获取csv文件中的每一行,以score.csv为例:
在上述示例中,csv文件的每一行内容都以列表的形式输出,其中由于存在汉字字符,因此编码方式设置为“encoding=‘utf-8’”。
与读取文件类似,写入内容需要创建writer()对象,写入方式有两种:writerow()方法和writerows()方法。
writerow()方法
writerow()方法用于将列表存储的一行数据写入文件,例如将[‘10153450111’,‘67’,‘89’,‘76’]和[‘10153450112’,‘88’,‘67’,‘92’]写入score.csv。
可以看到写入的记录之间出现了空行,在打开文件时增加一个参数newline= ''即可指明在写入内容时不插入空行。
writerows()方法
writerow()方法可以将序列的每一个元素作为一行内容一次性写入CSV文件,例如将[[‘10153450111’,‘67’,‘89’,‘76’],[‘10153450112’,‘88’,‘67’,‘92’]]写入score.csv。
同样,在打开文件时增加一个参数newline= ''即可指明在写入内容时不插入空行。