7

Python文件处理实用指南

 3 years ago
source link: https://zmister.com/archives/1588.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

对文件的操作算是Python中一个基础又重要的知识点了,无论是在爬虫、数据分析、Web开发,还是在编写图形界面、进行数据分析,都有可能需要用到文件相关的操作。

今天就来总结性地学习和回顾一下,Python各类文件处理。

文章目录 [显示]

一、open()模式

open()函数

open(文件名,操作模式)函数用来以指定的模式打开一个给定文件名的文件。

文件操作的基础模式

列名 列名 w 写模式:将擦除文件的内容,重新写入 r 读模式:只读取文件的内容 a 追加模式:在文件内容最后追加内容

使用w模式写入文件内容

2020-09-03-21-32_1599140052.gif

使用r模式读取文件内容

2020-09-03-21-35_1599140165.gif

使用a模式追加文件内容

2020-09-03-21-37_1599140307.gif

二、获取目录列表

基础的目录列表获取函数

通过os模块

  • os.listdir(目录名):其接受一个目录名作为参数,返回一个列表,列表中包含目录下的所有文件名和子目录名;
  • os.scandir(目录名):其行为类似于listdir(),但是其返回的是一个文件对象的迭代器,而非一个字符串。

通过pathlib模块

  • pathlib.Path.iterdir():其工作在一个path对象上,并返回一个类似于scandir()的迭代器对象。

文件夹的结构如下所示:

2020-09-03_215236.png

使用os.listdir()获取

2020-09-03-22-20_1599142916.gif

使用os.scandir()获取

2020-09-03-22-23_1599143079.gif

使用pathlib获取

2020-09-03-22-27_1599143301.gif

三、获取文件属性

Python中有丰富的函数和方法用来获取文件的信息。

通过os模块

  • os.stat(路径字符串),给定一个文件或文件夹路径作为参数,返回一个stat_result对象;
  • os.scandir(目录名称),这个方法上面我们介绍过,其返回一个可迭代对象,我们遍历这个可迭代对象,每一个遍历的对象都有一个stat()方法,其返回值与os.stat()一样。

通过pathlib模块

  • pathlib.Path.iterdir(),其返回值中的每一个对象都有一个stat()方法,和os.scandir()一样。

使用os.stat()

2020-09-04-21-46_1599227231.gif

其返回的stat_result()对象内包含如下常见的信息:

  • st_mode,文件模式:包括文件类型和文件模式位(即权限位)。
  • st_ino,与平台有关,但如果不为零,则根据 st_dev 值唯一地标识文件。通常:
    • 在 Unix 上该值表示索引节点号 (inode number)。
    • 在 Windows 上该值表示 文件索引号 。
  • st_dev,该文件所在设备的标识符。
  • st_nlink,硬链接的数量。
  • st_ui,文件所有者的用户 ID。
  • st_gid,文件所有者的用户组 ID。
  • st_size,文件大小(以字节为单位),文件可以是常规文件或符号链接。符号链接的大小是它包含的路径的长度,不包括末尾的空字节。
  • st_atime,最近的访问时间,以秒为单位。
  • st_mtime,最近的修改时间,以秒为单位。
  • st_ctime,取决于平台:
    • 在 Unix 上表示最近的元数据更改时间,
    • 在 Windows 上表示创建时间,以秒为单位。

使用os.scandir()

2020-09-04-21-57_1599227920.gif

四、创建目录

创建目录依然可以借助os模块和pathlib模块。

通过os模块

  • os.mkdir(目录名),通过给定的目录名,创建单个目录;
  • os.makedirs(目录路径),创建一个完整的目录树;

通过pathlib模块

  • pathlib.Path.mkdir(),从给定的Path对象创建一个目录;
2020-09-04-22-10_1599228718.gif

五、删除文件和目录

通过os模块

  • os.remove(文件路径),删除单个文件,如果文件不存在,则抛出FileNotFound异常,如果路径为目录,则抛出IsADirectoryError异常;
  • os.unlink(文件路径),与os.remove()相同;

通过pathlib模块

  • pathlib.Path.unlink(),删除Path()对象文件。

删除单个目录

  • os.rmdir(目录路径),删除一个指定的目录路径,如果目录不为空,则抛出OSError异常;
  • pathlib.Path.rmdir(),删除路径对象。

删除目录树

  • shutil.rmtree(目录路径),删除一个完整的目录树;
2020-09-04-22-28_1599229788.gif
2020-09-04-22-30_1599229886.gif

六、文件名模式匹配

有时候需要对文件名进行模式匹配(包括正则)模糊查询,就需要用到文件名模式匹配相关的函数和方法了。

  • .startswith()endswith()方法,两者都在字符串上运行,并且在处理文件名时可以使用;
  • fnmatch.fnmatch(文件名,匹配模式),检测 filename 字符串是否匹配 pattern 字符串,返回 True 或 False。
  • glob.glob(匹配模式),返回匹配 pathname 的可能为空的路径名列表,其中的元素必须为包含路径信息的字符串。
  • pathlib.Path.glob(匹配模式),类似于与glob,但是基于Path对象进行操作。

字符串处理

2020-09-06-20-36_1599395874.gif

使用fnmatch

2020-09-06-20-39_1599396014.gif

七、遍历目录树和处理文件

  • os.walk(目录路径,topdown=True),生成目录树中的文件名,方式是按上->下或下->上顺序浏览目录树。对于以 top 为根的目录树中的每个目录(包括 top 本身),它都会生成一个三元组 (目录路径, 目录名列表, 文件名列表)。
2020-09-06-20-44_1599396307.gif

八、临时文件和目录

  • tempfile.TemporaryFile(模式),以指定模式创建和打开一个临时文件;
  • tempfile.TemporaryDirectory(),创建一个临时目录并返回它;
2020-09-06-20-54_1599396916.gif

九、复制、移动和重命名文件

  • shutil.copy(源,目标),将源文件复制到目标,如果目标为一个目录,则使用源相同的文件名;
  • shutil.copytree(源目录,目标目录),将以 源目录 为根起点的整个目录树拷贝到目标目录并返回目标目录。

移动和重命名

  • shutil.move(源,目标),将一个文件或目录从源移动到目标;
  • os.rename(现在名称,新名称),重命名一个文件或目录;

十、归档和压缩

  • zipfile.Zipfile(压缩包名,模式),以指定的模式打开一个压缩包;
  • zipfile.Zipfile().extract(文件名),从zip文件中提取给定的文件;
  • shutil.make_archive(基础文件名,格式名,根路径),从给定的参数中压缩打包一个文件夹为压缩包;
  • shutil.unpack_archive(压缩包文件名,提取到的目录),解压一个压缩包到指定目录;
2020-09-06-21-11_1599397899.gif

十一、读取多个文件

  • fileinput.input([文件名列表]),从给定的文件名列表中读取每一个文件;

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK