文件操作
1.1重要性
- 数据持久性:文件是存储数据的一种非常基本且重要的方式。通过文件,我们可以将程序产生额数据永久保存下来,以便将来使用。
- 跨平台兼容性:文件是一种通用的的数据交换格式,可以在不同的操作系统和平台上进行传输和处理
- 数据备份与恢复:定期备份书库到文件防止数据丢失,便于数据恢复
- 数据共享:文件可以轻松在网络之间共享,使得更多人协作成为可能
- 配置管理:许多应用程序使用文件来存储配置信息
- 日志记录:记录运行日志
1.2应用场景
- 数据分析
- web开发
- 系统管理
- 文本处理
- 游戏开发
2.1文件的概念
一种持久性存储介质,如硬盘上的数据集合。文件可以包含歌中歌类型的信息,包括文本,图像,音频,视频,音频以及其他类型的二进制数据。文件是操作系统用来组织好管理这些数据的主要方式之一。
文件组成:
- 数据:用户实际存储的信息
- 元数据:文件本身的附加信息,包括但不限于文件名,创建日期,文件大小,文件类型
- 文件系统:这是操作系统用来组织和管理文件的逻辑结构,包括文件的命名,存储和检索方式。文件系统还负责管理磁盘空间的分配,确保文件可以被正确读写。常见文件系统有FAT32,NTFS等
2.2文件的属性
文件名:唯一标识
位置
文件大小
创建日期和时间
修改日期和时间
访问权限:不同用户对文件的读、写、执行权限
2.3文件的类型
windows系统大致分为:
- 文本文件
- 二进制文件:不可读取,计算机可识别
- 可执行文件
- 目录/文件夹
linux系统可分为:
- -:普通文件
- d:目录文件
- b:块设备文件
- c:字符设备文件
- l:连接文件
- p:管道文件呢
- s:套接字文件
2.4文件路径
用来标识文件或者目录的一种方式
1.绝对路径
是从文件根目录开始的一条完整路径,它指明了根目录到目标文件或目录的具体步骤
特点:
不依赖与当前目录
在不同用户或程序间具有一致性
提供了文件或目录的完整信息
实例:
D:\ai2605\ai7\杨艳\第一阶段\03 python高级技巧\文件操作
\readme.txt
2.相对路径
D:\ai2605\ai7\杨艳\第一阶段\03 python高级技巧\文件操作
比如我要找这个目录下的的readme.txt文件,我只需要使用 .\readme.txt或者./readme.txt,即可;在Windows系统当中反斜杠和斜杠均可以,但是linux系统必须是./这种格式
特殊格式
当面目录:./
当前目录的父级目录: ../ ,用上面的例子解释就是 文件操作的上级03 python高级技巧下的文件
注意:文件夹命名含有数字的就必须使用转义字符,
\\03 python高级技巧下的文件
\t1\t2
# 若是不加反斜杠转义的话,就会被识别为一个制表符
这样03才不会被识别为其他的字符 而是表示文件的名字
3.文件操作的基本方法
3.1打开文件
在python当中,使用open()函数来打开文件,这个函数返回一个文件对象,可以用来进行后续的读写操作。
函数原型:
res = open(file_name,mode='r',buffering=None,encoding=None,eerors=None,newline=None,closefd=True)
file_name:要打开的文件的路径加名称包含后缀名,可以是绝对路径也可以是相对路径
mode:打开文件的模式,默认为'r',表示只读模式且以文本模式读取
buffering:可选参数,缓冲区大小。0表示无缓冲,1表示缓冲,更大的整数表示具体的缓冲区大小。默认为None,表示默认的缓冲策略,大多数情况下,使用默认值就可以了。
encoding:可选参数,用于指定文件的编码,仅适用于文本模式,默认值None表示系统默认编码打开文本文件
errors:可选参数,用于指定如何处理编码和解码错误,对于二进制模式无效。常见的值有stric,ignore,replace等
newline:可用于控制通用换行符模式的行为,他可以是
None,' ','\n','\r',或者'\r\n'
如果被设置为None,则通用换行符被启用,以上都被识别为换行符,并以\n的形式在文本模式下读取。如果设置为其他值,则在该值出进行换行符和转换
closefd:如果为True(默认值),则在文件关闭时关闭文件描述。如果为False,则文件描述在文件关闭时保持打开状态
3.2文件模式
以下是几种常见的文件打开模式:
- 'r':read只读模式(默认值)。如果文件不存在就会触发异常
- 'r+':打开文件进行读写,该文件必须存在,不在也会抛出异常
- 'w':write写入模式,如果我那件存在则覆盖,不存在则创建。
- 'w+':打开文件进行读写,如果文件存在则覆盖,不存在就创建
- 'a':追加模式,如果文件存在则在文件末尾追加内容,不存在则创建
- 'a+':打开文件进行读写,如果文件存在则在末尾追加,如果不存在则创建
- 'x':独占创建模式,如果文件已存在则抛出异常,还可以用来避免覆盖现有文件
- 'b':二进制模式,读写时数据不会被转换,直接以字节形式处理
- 't':文本模式(默认值),读写时,数据会被视为字符串
3.3读取文件
打开文件,可以使用以下方法读取内容:
- read(size):size是可选参数,在文本模式下,一次读取文件指针后面size个大小的字符,在二进制模式下,一次最多读取文件指针后面size个大小的字节,默认size为None,表示一次性读取文件指针后面的所有内容并将其作为字符串返回。
- readline():从文件中读取单行数据
- readlines():读取所有行,并返回一个列表
3.4写入文件
- write(str):将str的内容覆盖到当前文件指针位置的后面,并将文件指针移动到新的写入位置,会返回写入的字符数量,写入其他类型的对象时,要先将他们转化为字符串或字节对象
- writelines():写入一个字符串列表
3.5关闭文件
在python中,使用close()方法关闭文件。关闭文件是一个重要的操作,因为它释放了与文件对象关联的系统资源,并确保数据被正确地写入存储介质。
功能
1.释放资源
2.刷新缓冲区
3.禁止进一步操作:关闭文件后,文件对象不在允许读取,写入或其它操作
重要性:
文件操作完成后,应该关闭文件以释放资源。可以使用close()方法关闭文件。在python程序中,如果不关闭打开的文件,可能会产生以下影响:
- 1.资源管理:文件描述符是有限的资源
- 2.数据完整性
- 3.防止错误
- 4.提高效率
- 5.清理操作:如关闭网络连接或释放其他相关资源
3.6with语句
是可以解决我们忘记关闭这个操作的语句,with是一种上下文管理器,简化资源的打开和关闭过程
基本语法
with expression [as variable]
with-block
1.表达式(expression):这个表达式必须返回一个实现了上下文管理器协议的对象,包含--enter--和--exit--方法
2.as语句:这是可选的,如果提供了as子句,那么expression中的--enter--方法的返回值将被赋值给变量
3.with-block:这个代码是with语句的主体,在执行这个代码之前,会首先调用上下文管理器的--enter--方法。当with-block执行完毕之后,不论是因为正常完成还是因为异常,都会调用上下文管理器的--exit--方法,负责关闭文件
使用with语句的好处:
- 自动资源管理
- 更好的错误处理
- 更好的代码组织
4.文件指针的操作
4.1获取文件指针的位置
使用tell()函数去返回当前文件指针的位置;没有参数就代表返回文件指针相对于文件开头的偏移量,这个偏移量是一个整数,表示从文件开头到当前位置的字节数
注意事项:
tell方法仅在文件被打开读取时才有意义,因为在写入模式下,文件指针的位置会随着写入操作而改变
在读取模式下,tell方法返回的当前读取位置相对于文件开头的偏移量
其返回值是字节数,不是字符数,对于utf-8的编码格式来说,一个汉字占3个字节,所有中文字符与字节数是不同的
4.2改变文件指针的位置(光标)
# 使用seek函数去改变文件指针的位置
seek(offest,whence=0)第二个参数是默认为0,
offset:表示
相对于whence的偏移量,是一个整数,可正可负;正表示向文件末尾移动,负数表示向文件开头移动,0表示不偏移
whence:是一个可选参数,默认为0,指定了offset的起始位置,可以是以下是三个值之一
0:从文件开头开始计算偏移量
1:从文件当前位置开始计算偏移量
2:从文件末尾开始计算偏移量
5.获取文件属性
5.1获取文件大小
os.path.getmsize(path)
path:文件的路径
5.2 获取文件的最后修改时间
os.path.getmtime(path)
5.3 获取文件的创建时间
os.path.getctime(path)
5.4获取文件的最后访问时间
os.path.getatime(path)
6.目录操作
在python中,可以使用多个模块操作目录,最常用的就是os模块
6.1创建目录
在python当中使用os.mkdir(path)函数来创建目录
#函数原型
import os
os.mkdir(path,mode=0o777)
**注意**
1.os.mkdir()只能创建一级目录,父目录不在就抛出异常
2.创建多级目录结果,使用os.makedirs函数,他会递归的创建所需要的中间目录
path:要创建的目录的路径
mode:设置新创建的目录的权限位。默认值为0o777,八进制表示,意味所有人都有读,写和执行权限,只针对Linux系统,Windows系统会忽略
创建成功,函数不返回任何内容。如果指定的路径已经存在就会抛出异常,路径无效或权限不足不能创建目录也会抛出异常
多级目录
import os
os.makedirs('./t1/t2/test2')
6.2删除目录
在python当中,使用os.rmdir(path)函数去删除目录
import os
os.rmdir(path)
#注意
os.rmdir只能删除空目录。如果目录包含文件或其他目录,os.rmdir将无法删除它,并且会抛出异常
path:要删除的空目录的路径
如果目录删除成功,则函数不返回任何内容,如果指定的路径不存在,则会抛出异常,如果路径不是一个空目录,或者由于权限不足等原因无法删除目录,也会抛出此异常。
6.3改变当前工作目录
在python当中使用os.chdir(path)去改变工作目录
import os
os.chdir(path)
path:要切换到的目录的路径,如果指定的路径不存在,就会抛出异常。如果路径不是一个空目录,或者由于权限不足等原因无法删除目录,也会抛出异常
如果切换成功,则函数不返回任何内容
6.4获取当前工作目录
在python当中,使用os.getcwd()来获取当前的工作目录的路径
os.getcwd()
# 注意
1.os.getcwd()返回的是字符串形式的路径
2.在不同操作系统,路径方式不同,主要是Windows(反斜杠\),linux(正斜杠/)
该函数没有参数,返回字符串,表示当前工作目录的路径
适用场景:
需要再脚本确定当前的工作位置
当进行文件操作之前,需要知道文件的相对路径是基于哪个目录
当需要在不同目录下切换,需要返回到原始目录
6.5列出目录下的所有内容
在python当中使用os.listdir(path)函数获取指定目录下的所有文件和目录的名称
import os
items = os.listdir(path)
# 注意:
1.os.listdir()不会递归列出目录中的内容,他只列出直接位于指定目录下的文件和子目录
2.返回的列表 只包含名称,不包含路径,如果需要完整路径,你需要将目录名称和路径结合起来
3.目录为空,返回空列表
4.使用os.listdir()时,应该考虑到可能出现的异常,并适当处理他们,以确保代码的健壮性
path:要列出内容的目录的路径,如果省略,默认为当前工作目录。如果指定路径不存在,指定的路径不是一个目录,没有权限读取指定的目录就会抛出 异常
这个函数返回一个列表,其中包含指定路径下的所有文件和目录
6.6 重命名目录
在python当中使用os.rename(src,dst)函数对一个文件或目录进行重命名。这个函数可以将一个文件或目录从其当前路径(源路径)更改我一个新的路径(目标路径),可以起到一个剪切的作用
import os
os.rename(src,dst)
# 注意
1.src:要重命名的文件或目录的当前路径
2.dst:文件或目录的新名称和路径
如果命名成功不返回任何内容
6.7检查路径是否为目录
在python中使用os.path.isdir()函数检查给定的路径是否为一个目录
import os
is_directory=os.path.isdir(path)
# 注意事项
1.os.path.isdir不会抛出异常。如果指定的路径不存在,他会返回False,而不是抛出异常
2.如果路径存在但不是目录,os.path.isdir也会返回False
3.路径可以是绝对路径,也可是相对路径
path:要检查的路径
如果指定的路径是一个目录,返回True;否则返回False
6.8检查路径是否为文件
在python当中使用os.path.isfile()函数来检查指定的路径是否是一个存在的文件。
import os
is_file = os.path.isfile(path)
#注意
os.path.isfile()不会检查路径是否存在,如果路径不存在,她将直接返回False.如果需要同时检查路径是否存在以及是否为文件,就可以先使用os.path.exists()确认路径存在,然后使用os.path.isfile()确认她是一个文件
path:要检查的路径
如果指定的路径是一个文件,返回True;否则返回False
os.path.isfile()的主要用途
1.在处理文件之前,确认指定的路径确实是一个文件,这样可以避免对目录执行文件操作。
2.在脚本执行条件逻辑时,区分文件和目录,以便进行适当的操作
6.9路径拼接
在python中使用os.path.join(path,*path)函数将一个或多个路径组件合并为一个完整def路径。这个函数会根据操作系统约定来正确处理路径分隔符。
import os
os.path.join(path,*paths)
path:起始路径,通常是一个,目录路径
paths(可变参数)-需要连接到path的其他路径片段
返回一个字符串,表示将所有路径片段连接后的完整路径。
os.path.join()作用包括:
1.合并路径:将多个路径组件合并为一个单一的路径字符串。
2.处理分隔符:他会根据操作系统自动添加或删除路径分隔符
3.消除冗余分隔符:如果路径组件之间有多余的分隔符,os.path.join()会自动处理,避免产生错误的路径。使用os.path.join()的好处是,它能够确保生成的路径在不同操作系统上是正确的,从而提高了代码的可移植性。此外,它还能避免手动拼接路径时可能出现的错误,如忘记添加分割符或添加了错误的分隔符
6.10路径拆分
在python当中,使用os.path.split()函数将路径分割为两部分:目录文件和文件名
import os
head,tail = os.path.split(path)
# 注意:
如果提供的路径以分隔符结尾,那么tail将是一个空字符串,表示路径的最后一部分是一个目录。此外路径是空字符串,os.path.split()将返回两个空字符串
path:表示要分割的路径
head:他是path的目录路径
tail:他是path的文件名
主要用途:
从完整路径中提取文件名或目录名
用于文件处理
在遍历文件系统是,帮组确定每个文件的上级目录
6.11获取绝对路径
import os
os.path.abspath(path)
# 注意
如果提供的path是一个不存在文件系统的路径,os.path.abspath()依旧会返回一个绝对的路径,但他不会验证路径是否存在。此外,如果path是一个空字符串,os.path.abspath()将返回当前工作目录的绝对路径
6.12检查路径是否存在
import os
path_exists=os.path.exists(path)
# 注意 os.path.exists仅检查路径是否存在,而不会区分该路径是文件还是目录,如果需要明确区分可以使用os.path.isfile()或os.path.isdir()
path:表示 要检查的路径
path_exists:返回一个布尔值,如果路径存在则返回True,不存在就返回False
用途:
执行文件操作前,确认目录或文件是否存在,以避免引发不必要的错误
在脚本执行逻辑时,根据目录的存在来决定是否觉得下一步
文件备份,清理或其他自动化任务中,检查特点文件或目录是否应该被处理
浙公网安备 33010602011771号