一、基本文件操作
在使用Python内置的文件对象时,首先需要通过内置open()方法创建一个文件对象,然后通过该对象提供的一些方法进行一些基本文件操作。
1.创建和打开文件
在Python中,想要操作文件,需要先创建或者先打开指定文件,并且创建文件对象。我们一般使用open()方法来实现。基本语法格式如下:
file=open(filename[,mode[,buffering]])
其中,file是被创建的对象;filename是要创建或者打开的文件名称,需要使用单引号或者双引号括起来。如果要打开的文件和当前文件在同一个目录下,那么直接写文件名即可,否则需要指定完整的路径。例如:要打开当前路径下名称为status.txt的文件,可以使用“status.txt”。
mode为可选参数,用于指定文件的打开模式,其参数值如下表所示。默认的打开模式为只读(r)。buffering为可选参数,用于指定读写文件的缓冲模式,值为0表示不缓存,值为1表示缓存,如果值大于1,则表示缓冲区的大小,默认为缓存模式。
mode常见的参数值以及其说明【一部分】
值 | 说明 | 注意 |
r | 以只读方式打开文件。文件的指针会放在文件的开头。 | 文件必须存在 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并且从开头开始编辑,即原始内容会被删除。如果该文件不存在,创建新的文件。 | 文件存在,则将其覆盖,否则创建新文件。 |
a | 打开一个文件用于追加。如果该文件已经存在,文件的指针将会放在文件的结尾。也就是说,新的内容会被写入到已有的内容之后。如果该文件不存在,创建新的文件写入。 |
2.关闭文件
打开文件后,需要及时关闭,以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。基本语法格式如下:
file.close()
其中,file为打开的文件对象。
分析如下代码
import os
f = open("my_file.txt",'w')
#...
os.remove("my_file.txt)
上述代码中引用了os模块,调用了该模块中的remove()函数,该函数的功能是删除指定的文件。但是如果运行次程序,Python解释器会报异常。这是因为使用了open()方法打开了文件但是没有及时关闭,直接导致后面的remove()函数运行出现错误。
正确的代码应该如下所示:
import os
f = open("my_file.txt",'w')
f.close()
#...
os.remove("my_file.txt)
3.打开文件时使用with语句
打开文件后,应该及时关闭,则可能会带来其他问题。另外,如果在打开文件时抛出了异常,那么就会导致该文件不能技术关闭。为了避免此类问题的产生,我们可以使用with语句,从而实现在处理文件时,无论是否抛出异常,都能保证with语句执行完毕后关闭已经打开的文件。基本语法格式如下:
with expression as target:
with-body
其中,expression用于指定一个表达式,这里可以使打开的文件的open()方法;target用于指定一个变量,并且将expression的结果保存到该变量中;with-body用于指定with语句体,其中可以执行with语句后相关的一些操作语句。如果不想执行任何语句,可以直接用pass语句代替。
4.写入文件的内容
C语言中文网
http://c.biancheng.net
在Python中除了可以读取文件内容之外,还可以向文件中写入内容,写入内容的类型也是有选择的。Python中提供了write()方法,可以向文件中写入内容。write()方法的基本语法格式如下:
file.write(string)
其中,file为打开的文件对象;string为要写入的字符串。
创建一个a.txt文件,该文件的内容如下:
C语言中文网
http://c.biancheng.net
然后,在和a.txt文件同级目录下创建一个Python文件,编写如下代码:
f = open("a.txt".'w')
f.write("写入一行新数据")
f.close()
前面已经讲过,如果打开文件模式中包含w(写入),那么向文件中再次写入内容时,会先清空原文件中的内容,然后再写入新的内容。因此,运行上面的程序,再次打开a.txt文件,只会看到新写入的内容。如下图:
如果打开文件模式中包含a(追加),则不会清空原有的内容,而是将新写入的内容添加到原内容后面。
Python中的文件对象,不仅提供了write()方法,还提供了writelines()方法,可以将字符串列表写入文件中。
【注意】:写入函数只有write()方法和writelines()方法,没有wriyeline()的方法。
5.读取文件
在Python中打开文件后,除了可以向其写入或者追加内容后,还可以读取文件中的内容。读取文件内容主要分为以下几种情况。
①读取指定字符
使用Python提供的read()方法读取指定个数的字符,语法格式如下:
file.read([size])
size为可选参数,用于指定要读取的字符个数,如果省略则一次性读取全部内容。
使用read()方法读取文件时,是从文件的开始进行读取的,如果想要读取中间某个片段的内容,可以先使用文件对象的seek()方法将文件的指针移到指定的位置,然后再使用read()方法进行读取内容。seek()方法的语法格式如下:
seek(offset,whence=0)
offset是偏移量,也就是代表需要移动偏移的字节数;whence为给offset参数一个定义,表示无论从哪个位置开始偏移,0代表从文件开头算起,1代表是从当前位置开始算起。2表示从文件末尾开始算起。当有换行时,会被换行截断。
②读取一行
文件对象提供了readline()方法用于每次读取一行数据。readline()方法的语法格式如下:
file.readline()
③读取全部行
读取全部行,采用的是文件对象的readlines()方法,语法格式如下:
file.readlines()
二、目录操作
1.os和os.path模块
导入os模块可以使用以下语句:
import os
导入os模块后,可以使用该模块的通用变量获取与系统有关的信息。
下面列举几个常用的变量:
(1)name:用于获取操作系统类型
在IDLE编辑器中输入os.name:
(2)linnesep:用于获取当前操作系统上的换行符
在IDLE编辑器内输入os.linesep:
(3)sep:用于获取当前操作系统所使用的路径分隔符
在IDLE编辑器中输入os.sep:
os模块提供的与目录有关的函数
函数 | 说明 |
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path) | 删除目录 |
chdir(path) | 把path设置为当前工作目录 |
os.path模块提供的与目录有关的函数
函数 | 说明 |
adspath(path) | 用于获取文件或者目录的绝对路径 |
isdir(path) | 用于判断是否为有效路径 |
join(path,name) | 将目录与目录或者文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
2.路径
用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时,通常会涉及两种路径,一种是相对路径,另一种是绝对路径。了解什么是绝对路径和相对路径之前要先了解什么是工作目录
①当前工作目录
每个运行在计算机上的程序,都有一个“当前工作目录”。所有没有从根文件夹开始的文件名或者路径,都假定在当前工作目录下。
②相对路径
相对路径依赖于当前工作目录,如果在当前工作目录下有一个名称为message.txt的文件,那么在打开这个文件时,就可以直接写上文件名,这时采用的就是相对路径。
③绝对路径
绝对路径是指在使用文件时指定文件的实际路径。它不依赖于当前工作目录。在Python中,可以通过os.path了、模块提供的abspath()函数获取一个文件的绝对路径。基本语法格式如下:
os.path.abspath(path):
3.判断目录是否存在
在Python中有时候需要判断给定的目录是否存在,这是可以使用os.path模块提供的exists()函数实现。exists()函数基本语法格式如下:
os.path.exists(path)
其中,path为要判断的目录,可以采用绝对路径,也可以采用相对路径。
返回值:如果给定的路径存在,则返回True,否则返回False
os模块中的os.path.exists()方法用于检验文件是否存在。
当出现文件夹名称和文件名称重复时,使用上述函数检验会产生错误,这个时候,可以使用另一种方法来检查文件是否存在。【假设文件名称都为test-data】
import os
os.path.isflie("test-data")
4.创建目录
在Python中,os模块提供了两个创建目录的函数,一个用于创建一级目录,另一个用于创建多级目录。
①创建一级目录
创建一级目录是指一次只能创建一级目录。在Python中,可以使用os模块提供的mkdir()函数实现。通过该函数只能创建指定路径的最后一级目录。基本语法格式如下:
os.mkdir(path,mode=o0777)
其中,path用于指定要创建的目录,可以使用绝对路径也可以使用相对路径;mode用于指定数值模式,默认值为0777,该参数在非UNIX系统上无效或被忽略。
②创建多级目录
基本语法格式如下:
os.makedirs(name,mode=o0777)
5.删除目录
删除目录可以使用os模块提供的rmdir()函数来实现。通过rmdir()函数删除目录时只有当要删除的目录为空时才起作用。基本语法格式如下:
os.rmdir(path)
6.遍历目录
所谓遍历,是指沿着某条搜索路线,依次对树(或者图)中的每个节点均做一次访问。在Python中,遍历的意思就是对指定目录下的全部目录(包括子目录)及文件运行一遍。os模块中的walk()函数可以用于实现遍历目录的功能,基本语法格式如下:
os.walk(top[,topdown][,onerror][,followlinks])
三、高级文件操作
Python内置的os模块除了可以对目录进行操作,还可以对文件进行一些高级操作
os模块的函数以及其说明
函数 | 说明 |
chmod(path.mode) | 修改path指定文件的访问权限 |
remove(path) | 删除path指定的文件路径 |
rename(src.dst) | 将文件或者目录src重命名为dst |
stat(path) | 返回path指定文件的信息 |
startfile(path[,operation]) | 使用关联的应用程序打开path指定的文件 |
1.删除文件
如上表所示,可以使用内置的os模块中的删除文件函数remove(),基本语法格式如下:
os.remove(path)
2.重命名文件和目录
Python中的os模块提供了rename()函数,可以用来重命名文件和目录,如果指定的路径是文件,则重命名文件,如果指定的路径是目录,则重命名目录。基本语法格式如下:
os.rename(src.dst)
在使用rename()函数重命名目录时,只能修改最后一级目录,否则抛出异常。
3.获取文件基本信息
在计算机上创建文件后,该文件本身就会包含一些信息。例如,文件的最后一次访问时间、最后一次修改时间、文件大小的基本信息等等。通过os模块到的stat()函数可以获取到文件的这些基本信息。stat()函数的基本语法格式如下:
os.stat(path)
其中,path为获取文件基本信息的文件路径,可以是相对路径也可以是绝对路径。stat()函数的返回值是一个对象,该对象包含的属性如下表所示。通过访问这些属性可以获取文件的基本信息。
stat函数的属性
属性 | 说明 |
st_mode | 保护模式 |
st_into | 索引号 |
st_nlink | 硬链接号(被连接数目) |
st_size | 文件大小,单位为字节 |
st_dev | 设备名 |
st_uid | 用户ID |
st_gid | 组ID |
st_atime | 最后一次访问的时间 |
st_mtime | 最后一次修改的时间 |
st_ctime | 最后一次状态变化的时间(系统不同返回的结果也不同,如在Windows操作系统下返回的是文件创建的时间) |