文件操作

1.1重要性

  • 数据持久性:文件是存储数据的一种非常基本且重要的方式。通过文件,我们可以将程序产生额数据永久保存下来,以便将来使用。
  • 跨平台兼容性:文件是一种通用的的数据交换格式,可以在不同的操作系统和平台上进行传输和处理
  • 数据备份与恢复:定期备份书库到文件防止数据丢失,便于数据恢复
  • 数据共享:文件可以轻松在网络之间共享,使得更多人协作成为可能
  • 配置管理:许多应用程序使用文件来存储配置信息
  • 日志记录:记录运行日志

1.2应用场景

  • 数据分析
  • web开发
  • 系统管理
  • 文本处理
  • 游戏开发

2.1文件的概念

一种持久性存储介质,如硬盘上的数据集合。文件可以包含歌中歌类型的信息,包括文本,图像,音频,视频,音频以及其他类型的二进制数据。文件是操作系统用来组织好管理这些数据的主要方式之一。

文件组成:

  • 数据:用户实际存储的信息
  • 元数据:文件本身的附加信息,包括但不限于文件名,创建日期,文件大小,文件类型
  • 文件系统:这是操作系统用来组织和管理文件的逻辑结构,包括文件的命名,存储和检索方式。文件系统还负责管理磁盘空间的分配,确保文件可以被正确读写。常见文件系统有FAT32,NTFS等

2.2文件的属性

文件名:唯一标识

位置

文件大小

创建日期和时间

修改日期和时间

访问权限:不同用户对文件的读、写、执行权限

2.3文件的类型

windows系统大致分为:

  1. 文本文件
  2. 二进制文件:不可读取,计算机可识别
  3. 可执行文件
  4. 目录/文件夹

linux系统可分为:

  1. -:普通文件
  2. d:目录文件
  3. b:块设备文件
  4. c:字符设备文件
  5. l:连接文件
  6. p:管道文件呢
  7. 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')

image-20260612110015647

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

用途:

执行文件操作前,确认目录或文件是否存在,以避免引发不必要的错误

在脚本执行逻辑时,根据目录的存在来决定是否觉得下一步

文件备份,清理或其他自动化任务中,检查特点文件或目录是否应该被处理