Python处理文件系统的10种方法


Python处理文件系统的10种方法

文章插图
 
 
作者 | Jeff Hale
译者 | 风车云马;责编 | Jane,Rachel
出品 | Python大本营(ID:pythonnews)
【导读】在编写一些Python程序的时候,我们常常需要与文件系统进行交互 。在本文中,营长为大家整理了10个常用的相关命令,涉及查看信息、更改信息、删除文件等,并提供了相应的终端命令,帮助大家更高效地对文件系统及其中的文件内容进行操作 。
通过一个能够实现与文件系统进行交互的Python程序,我们可以实现很多有趣的应用,但是大部分人并不知道如何实现这种交互 。本文为相关研发人员和数据科学家提供了一个实现指南,并重点介绍10个基本的os和shutil命令,以便通过脚本实现Python程序与文件系统的自动交互 。
文件系统和一栋房子的结构相似 。在每次进行大扫除的时候,我们都需要将很多箱的文件从一个屋子移动到另一个屋子,这和使用Python移动文件的操作很像 。
文件目录则像装满了东西的箱子,只不过在文件系统中,装的都是系统中存储的文件 。
装在箱子中的笔记本,就像电脑中存储的文件,我们可以对其进行读/写,也可以把它们存放在目录中 。
这个指南介绍了os和shutil模块中的相关方法 。其中,os模块主要用于与操作系统交互,shutil模块则包含一些针对文件的操作 。一般情况下,我们使用os创建目录,使用shutil移动和复制文件 。
Python标准库更新:2019年2月16日新增pathlib库
在 Python 3.4 版本,标准库中增加了 pathlib 模块,以改进文件路径的处理;在3.6版本中,增加了更多pathlib与标准库的其他模块的交互,效果很好 。pathlib将路径视为对象而非字符串,这使得其在解析文件路径上具有一定优势 。如果你想要对pathlib有更多了解,可以阅读 Real Python 和 pbpython 提供的介绍 。虽然pathlib 很方便,但它不具备我们将要探索的一些底层功能 。因此,使用 os 和shutil 方法还是有必要的 。
在进行更详细的介绍之前,有以下几点需要注意:
  • 本指南是基于 python3,2020年1月以后将不再支持 python 2。
  • 在使用相关命令之前,需要在代码开头导入了 os 和 shutil 库 。
  • 我的示例代码可以在GitHub上找到 。
  • 请使用自己的参数替换下面引号中的参数 。
下面,本文将逐一介绍文件系统的 10 种命令方法,每个部分都会按照“方法:描述→对应的 macOS Shell 命令”模式进行介绍,便于大家理解 。
一、获取信息(Get Info)
  • os.getcwd():以字符串形式获取当前工作目录路径 → pwd
  • os.listdir()?:以字符串列表的形式获取当前工作目录的内容→ls
  • os.walk("starting_directory_path"):返回一个生成器(generator),该生成器包含当前目录和所有子目录中的文件名称及路径信息;→没有完全等价的shell命令,不过 ls -R 命令提供了子目录名称和子目录中的文件名称
二、更改信息(Change Things)
  • os.chdir("/absolute/or/relative/path"):更改当前的工作路径→ cd
  • os.path.join():创建路径供后续使用→ 没有等效的命令
  • os.makedirs(“dir1 / dir2”):创建目录→ mkdir - p
  • shutil.copy2("source_file_path","destination_directory_path"):复制文件或目录→ cp
  • shutil.move("source_file_path","destination_directory_path"):移动文件或目录→ mv
  • os.remove(“my_file_path”):删除文件→ rm
  • shutil.rmtree(“my_directory_path”):删除路径及其包含的所有文件和目录→ rm –rf
以上是对十个最常用、基础的文件系统方法的初步介绍,接下来我们再深入讲解一些重要的模块和使用方法 。
查看信息
os.getcwd()以字符串形式返回当前工作目录
os.listdir() 以字符串列表形式返回当前目录
os.walk("my_start_directory")创建一个生成器,用于返回关于当前目录和子目录的信息 。在起始指定的目录中有效 。
os.walk() 遍历包含的每个目录后,都会返回下列项:
(1)当前目录路径(字符串类型)
(2)当前目录下的子目录名称(字符串列表类型)
(3)当前目录中的文件名称(字符串列表类型的)
使用带有for循环的os.walk()来遍历目录及其子目录的内容通常很有用 。例如,下面的代码将打印当前工作目录的目录和子目录中的所有文件 。


推荐阅读