您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

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

时间:2019-06-05 10:23:58  来源:  作者:
基础必备 | 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()来遍历目录及其子目录的内容通常很有用。例如,下面的代码将打印当前工作目录的目录和子目录中的所有文件。

import os
cwd = os.getcwd()
for dir_path, dir_names, file_names in os.walk(cwd):
 for f in file_names:
 print(f)

以上是获取信息的操作。下面让我们一起看一下更改工作目录或移动、复制、删除文件系统的命令。

更改信息

os.chdir("/absolute/or/relative/path")

此方法将当前工作路径更改为绝对路径或相对路径。

如果随后要对文件系统进行其他更改,在试用该方法时留意处理任何异常。否则,您可能正在删除不希望删除的目录或文件。

os.path.join()

os.path模块提供了许多用于路径名操作的有用方法。您可以使用它查找有关目录名称,或者目录名称的部分信息。该模块还可以用来检查文件或目录是否存在。

os.path.join()提供将多个字符串完美连接在一起的文件路径,而且是在大多数操作系统上都可以工作的路径。该模块文档的描述为,该命令可以“更加智能的连接一个或多个路径组件,返回值是路径或路径的任何成员路径的连接,每个非空路径后都有一个目录分隔符(os.sep),最后一个除外”。

另外,如果使用的是Unix或macOS系统,os.path.join()会在每个字符串之间添加一个斜杠(" / ")来创建路径。如果操作系统需要“”,那么join会自动使用反斜杠。

os.path.join()还向其他开发人员提供了创建路径的明确信息。强烈建议读者多使用这个命令,不要每次都手动添加斜杠。

os.makedirs("dir1/dir2")

os.makedirs()能够生成目录。mkdir()方法也可以生成目录,但它不生成中间目录。所以建议使用os.makedirs()。

shutil.copy2("source_file", "destination")

在Python中复制文件和目录的方法有很多,但建议使用此命令。shutil.copy2()的优势在于,它尽可能地保留了源文件的元数据。如果你希望对文件和努力的复制有更多了解,可以阅读这篇文章。

 

移动文件

shutil.move("source_file", "destination")

使用shutil.move()更改文件的位置。它使用 copy2 作为后台参数默认值。

os.remove("my_file_path")

当需要删除文件时,可以使用os.remove()工具。

shutil.rmtree("my_directory_path")

shutil.rmtree()删除一个目录及其中的所有文件和目录。

 

删除文件

使用删除函数的时候一定要多加小心!您可以使用print()将要删除的内容打印出来,在确定不会删除错误文件后,再用相应的删除文件函数替换print()。在此向Al Sweigart致敬,感谢他在文章《Automate the Boring Stuff with Python》中进行的讨论。

最后我们再回顾一下整个方法。

10种文件系统方法概述

下面方法遵循这个模式:方法——描述——等效macOS Shell命令

获取信息

  • os.getcwd() ——以字符串形式获取当前工作目录路径—— pwd
  • os.listdir() ——以字符串列表的形式获取当前工作目录的内容——ls
  • os.walk("starting_directory_path")——返回函数,其中包含当前目录和所有子目录中的目录和文件的名称和路径信息——没有完全等价的shell命令,不过ls -R提供了子目录名称和子目录中的文件名称

改动信息

  • os.chdir("/absolute/or/relative/path") ——改变当前的工作路径——cd
  • os.path.join()——创建路径供后续使用——没有等效CLI
  • 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

以上介绍了关于Python与文件系统交互的一些基础知识。希望大家在Ipython编辑器中多尝试这些命令,并向其他人解释这些方法,以更好的掌握和巩固知识。

如果你想对相关内容有更多了解,可以看看免费的电子书,或者多用Python编编代码。关于使用Python从文件中读写的相关操作,请查看open函数的官方文档。
 



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  Tags: Python  点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  Tags: Python  点击:(4)  评论:(0)  加入收藏
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Tags: Python  点击:(6)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  Tags: Python  点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  Tags: Python  点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  Tags: Python  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条