1.9.1文件介绍
文件是长久保存信息并允许重复使用和反复修改的重要方式,同时也是信息交换的
重要途径。数据库文件、图像文件、音频和视频文件、可执行文件、Office 文档、动态链接库文件等,都以文件的形式存储在不同形式的存储设
备(如磁盘、U盘、光益、云盘等)上按文件中数据的组织形式可以把文件分为文本文件和二进制文件两大类。
1.文本文件
文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符\n’结尾。常规字符串是指记事本之类的文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的字符串,如英文字母、汉字、数字字符串在Windows平台中,扩展名为txt,log,ini的文件都属于文本文件,可以使用字处理软件(如gedit、记事本)进行编辑。
2.二进制文件
常见的如图形图像文件、音频和视频文件、可执行文件、资源文件、各种数据库文件、各类Office 文档等都属于二进制文件。 二进制文件把信息以字节串(bytes)进行存储,无法用记事本或其他普通字处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用对应的软件进行解码后读取、显示、修改或执行.
1.9.2 文件对象常用方法与属性
建文件对象,然后逋过该文件对象对文件内容进行读取、写人、删除、修改等操作:最后关无论是文本文件还是二进制文件,其操作流程基本都是一致的,即首先打开文件并创建并保存文件内容.Python内置了文件对象,通过open()函数即可以指定模式打开指定文件并创建文件对象,该函数用法为
open(file,mode=‘r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
该函数的主要参数含义如下。
(1)参数file指定要打开或创建的文件名称,如果该文件不在当前目录中,则需要指定完整路径,为了减少完整路径中“\”符号的输入,可以使用原始字符串。
(2)参数mode指定打开文件后的处理方式,如“只读”“只写”“读写”、“追加”、“二进制只读”,“二进制读写”等,默认为“文本只读模式” 。以不同方式打开文件时,文件指针的初始位置略有不同,例如,以“只读”和“只写”模式打开文件时文件指针的初始位置是文件头,而以“追加”模式打开文件时则文件指针的初始位置为文件尾。
(3)参数buffering指定读写文件的缓存模式,数值0(只在二进制模式中可以用)表示不缓存、数值1(只在文本模式中可以用)表示使用行缓存模式,大于1的数字则表示缓冲区的大小、默认值是一1。当使用默认值一1时,二进制文件和非交互式文本文件以固定大小的块为缓存单位,等价于 io.DEFAULT_BUFFER_SIZE,交互式文本文件(isatty()方法返回 True)采用行缓存模式
(4)参数encoding指定对文本进行编码和解码的方式,只适用于文本模式,可以使用
Python 支持的任何格式,详见标准库 codecs。
(5)参数newline 只适用于文本模式,取值可以是None,",’\n’,’\r’,’\t\n’中的任何
一个,表示文件中新行的形式.
如果执行正常,open()函数返回一个可迭代的文件对象,通过该文件对象可以对文
件进行读写操作,如果指定文件不存在、访问权限不够、磁盘空间不够或其他原因导致创
建文件对象失败则抛出异常。 下面的代码分别以读、写方式打开了两个文件并创建了与
之对应的文件对象。
f1 = open("file1.txt','r')
f2 = open('file2.txt','w')
当对文件内容操作完以后,一定要关闭文件对象,这样才能保证所做的任何修改都确实被保存到文件中。
f1.close()
f2.close()
文件打开模式
格式:open(‘文件路径’,‘打开模式’)
返回值:文件io对象
打开模式一共N种:
模式 | 解释 | 描述 |
---|---|---|
w模式 | 写模式write | 文件不存在时会创建文件,如果文件已存在则会清空文件 |
r模式 | 读模式read | 文件不存在就报错,存在则准备读取文件 |
a模式 | 追加模式 append | 文件不存在则新建,文件存在则在文件末尾追加内容 |
x模式 | 抑或模式 xor | 文件存在则报错,文件 不存在则新建文件 |
b模式 | 二进制模式 binary | 辅助模式不能单独使用 |
+模式 | 增强模式plus | 也是辅助模式不能单独使用 |
以上模式可以互相组合:wrax不可以互相组合:
模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件对象常用属性
属性 | 说明 |
---|---|
closed | 判断文件是否关闭,若文件已关闭则返回 True |
mode | 返回文件的打开模式 |
name | 返回文件的名称 |
文件对象的常用方法如上表所示。 特别说明的是,文件读写操作相关的函数都会自动改变文件指针的位置。 例如,以读模式打开一个文本文件,读取10个字符,会自动把文件指针移到第11个字符,再次读取字符的时候总是从文件指针的当前位置开始读取。写人文件的操作函数也具有相同的特点。
文件对象的常用方法
方法 | 功能说明 |
---|---|
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区的内容写人文件,同时关闭文件,并释放文件对象 |
read([size]) | 从文件中读取size个字节(Python2.x)或字符(Python3.x)的内容作为结果返回,如果省略size则表示读取所有内容 |
readline() | 从文本文件中读取一行内容作为结果返回 |
readlines() | 把文本文件中的每行文本作为一个字符串存入列表中,返回该列表 |
seek(offset[,whence]) | 把文件指针移到新的位置,offset 表示相对于 whence 的位置.whence为0表示从文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0 |
tell() | 返回文件指针的当前位置 |
truncate([size]) | 删除从当前指针位置到文件末尾的内容。 如果指定了 size,则不论指针truncate([size]) |
在什么位置都只留下前 size个字节,其余的删除 | |
write(s) | 把字符串s的内容写人文件 |
writelines(s) | 把字符串列表写人文本文件,不添加换行符 |
writable() | 测试当前文件是否可写 |
readable() | 测试当前文件是否可读 |
1.9.3 OS模块:
- OS – 操作系统的简称
- os模块就是对操作系统进行操作
- 使用该模块必须先导入模块:
import os
序号 | 函数名称 | 描述 | 格式 | 返回值 |
---|---|---|---|---|
1 | getcwd() | 获取当前的工作目录 | 格式:os.getcwd() | 返回值:路径字符串 |
2 | chdir() | 修改当前工作目录 | 格式:os.chdir() | 返回值:None |
3 | listdir() | 获取指定文件夹中的所有文件和文件夹组成的列表 | 格式:os.listdir(目录路径) | 返回值:目录中内容名称的列表 |
4 | mkdir() | 创建一个目录/文件夹 | 格式:os.mkdir(目录路径) | 返回值:None |
5 | makedirs() | 递归创建文件夹 | 格式:os.makedirs(路径) | |
6 | rmdir() | 移除一个目录(必须是空目录) | 格式:os.rmdir(目录路径) | 返回值:None |
7 | removedirs() | 递归删除文件夹 | 格式:os.removedirs(目录路径) | 返回值:None (注意最底层目录必须为空) |
8 | rename() | 修改文件和文件夹的名称 | 格式:os.rename(源文件或文件夹,目标文件或文件夹) | 返回值:None |
9 | stat() | 获取文件的相关 信息 | 格式:os.stat(文件路径) | 返回值:包含文件信息的元组 |
10 | system() | 执行系统命令 | 格式:os.system() | 返回值:整型 |
11 | getenv() | 获取系统环境变量 | 格式:os.getenv(获取的环境变量名称) | 返回值:字符串 |
12 | putenv() | 设置系统环境变量 | 格式:os.putenv(‘环境变量名称’,值) | 返回值:无(注意:无法正常的getenv检测到) |
13 | exit() | 推出当前执行命令,直接关闭当前操作 | 格式:exit() | 返回值:无 |
当前os模块的值:
序号 | 函数 | 名称 | 描述 |
---|---|---|---|
1 | curdir | os.curdir | 获取当前路径 都是. |
2 | pardir | os.pardir | 获取上层目录路径 都是… |
3 | path | os.path os | 中的一个子模块,操作非常多 |
4 | name | os. name | 当前系统的内核名称 win->nt linux/unix->posix |
5 | sep | os.sep | 获取当前系统的路径分割符号 window -> \ linux/unix -> / |
6 | extsep | os.extsep | 获取当前系统中文件名和后缀之间的分割符号,所有系统都是. |
7 | linesep | os.linesep | 获取当前系统的换行符号 window -> \r\n linux/unix -> \n |
os.path模块
- os.path是os模块中的子模块,包含很多和路径相关的操作
函数部分:
序号 | 函数名称 | 描述 | 格式 | 返回值 |
---|---|---|---|---|
1 | abspath() | 将一个相对路径转化为绝对路径 | 格式:os.path.abspath(相对路径) | 返回值:绝对路径字符串 |
2 | basename() | 获取路径中的文件夹或者文件名称(只要路径的最后一部分) | 格式:os.path.basename(路径) | 返回值:路径的最后一部分(可能是文件名也可能是文件夹名) |
3 | dirname() | 获取路径中的路径部分(出去最后一部分) | 格式:os.path.dirname(路径) | 返回值:路径中除了最后一部分的内容字符串 |
4 | join() | 将2个路径合成一个路径 | 格式:os.path.join(路径1,路径2) | 返回值:合并之后的路径 |
5 | split() | 将一个路径切割成文件夹和文件名部分 | 格式:os.path.split(路径) | |
6 | splitext() | 将一个文件名切成名字和后缀两个部分 | 格式:os.path.splitext(文件名称) | 返回值:元组 (名称,后缀) |
7 | getsize() | 获取一个文件的大小 | 格式:os.path.getsize(路径) | 返回值:整数 |
8 | isfile() | 检测一个路径是否是一个文件 | 格式:os.path.isfile(路径) | 返回值:布尔值 |
9 | isdir() | 检测一个路径是否是一个文件夹 | 格式:os.path.isdir(路径) | 返回值:布尔值 |
10 | getctime() | 获取文件的创建时间! get create time | 格式:os.path.getctime(文件路径) | 返回值:时间戳浮点数 |
11 | getmtime() | 获取文件的修改时间! | get modify time | 格式:os.path.getmtime(文件路径) |
12 | getatime() | 获取文件的访问时间! get active time | 格式:os.path.getatime(文件路径) | 返回值:时间戳浮点数 |
13 | exists() | 检测指定的路径是否存在 | 格式:os.path.exists(路径) | 返回值:布尔值 |
14 | isabs() | 检测一个路径是否是绝对路径 | 格式:os.path.isabs(路径) | 返回值:布尔值 |
15 | islink() | 检测一个路径是否是链接 | 格式:os.path.islink(路径) | 返回值:布尔值 |
16 | samefile() | 检测2个路径是否指向同一个文件 | 格式:os.path.samefile(路径1,路径2) | 返回值:布尔值 |