当前位置: 首页 > 编程日记 > 正文

基础必备 | Python处理文件系统的10种方法

640?wx_fmt=jpeg

作者 | Jeff Hale 

译者 | 风车云马;责编 | Jane,Rachel

出品 | Python大本营(ID:pythonnews)


【导读】在编写一些Python程序的时候,我们常常需要与文件系统进行交互。在本文中,营长为大家整理了10个常用的相关命令,涉及查看信息、更改信息、删除文件等,并提供了相应的终端命令,帮助大家更高效地对文件系统及其中的文件内容进行操作。

 

通过一个能够实现与文件系统进行交互的Python程序,我们可以实现很多有趣的应用,但是大部分人并不知道如何实现这种交互。本文为相关研发人员和数据科学家提供了一个实现指南,并重点介绍10个基本的os和shutil命令,以便通过脚本实现Python程序与文件系统的自动交互。

      640?wx_fmt=png       

文件系统和一栋房子的结构相似。在每次进行大扫除的时候,我们都需要将很多箱的文件从一个屋子移动到另一个屋子,这和使用Python移动文件的操作很像。

      640?wx_fmt=png       

文件目录则像装满了东西的箱子,只不过在文件系统中,装的都是系统中存储的文件。

        640?wx_fmt=png       

装在箱子中的笔记本,就像电脑中存储的文件,我们可以对其进行读/写,也可以把它们存放在目录中。

 

这个指南介绍了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)

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

       640?wx_fmt=png更改信息

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()的优势在于,它尽可能地保留了源文件的元数据。如果你希望对文件和努力的复制有更多了解,可以阅读这篇文章。 


     640?wx_fmt=jpeg       


移动文件

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

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

os.remove("my_file_path")

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

shutil.rmtree("my_directory_path")

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

       640?wx_fmt=png       

删除文件


使用删除函数的时候一定要多加小心!您可以使用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函数的官方文档。

原文链接:

https://towardsdatascience.com/10-python-file-system-methods-you-should-know-799f90ef13c2


(*本文为 AI科技大本营转载文章,转载请联系原作者)


精彩推荐



640?wx_fmt=jpeg

推荐阅读

  • “爱装X”开源组织:“教科书级”AI知识树究竟长什么样?

  • MNIST重生,测试集增加至60000张!

  • 基础必备 | Python处理文件系统的10种方法

  • 500行Python代码打造刷脸考勤系统

  • 前端开发20年变迁史

  • 刚出炉!AI指数报告:AI人才需求暴涨35倍,薪酬问鼎No.1

  • ARM 发布新一代CPU和GPU,实现20%性能提升!

  • 北漂杭漂的程序员,是如何买到第一套房子?

  • 权游播完了, 你在骂烂尾, 有人却悄悄解锁了新操作……


640?wx_fmt=png


点击阅读原文,查看更多精彩内容。

相关文章:

安装Oracle11g先决条件检查失败

体系结构 - 此先决条件将测试系统是否具有认证的体系结构。预期值:?N/A实际值:?N/A?错误列表:?-?PRVF-7536 : 无法在节点 "mywin7" 上执行体系结构检查 ?- Cause:? 无法确定系统体系结构。 ?-Action:? 确保正在使用正确的软件包。 处理 转载于:https://www.…

Windows Forms高级界面组件-使用状态栏控件

状态栏(StatusStrip)控件通常显示在窗体的底部,向用户提供有关应用程序状态的信息。如Word应用程序使用状态栏提供页码、行数和列数的信息。StatusStrip派生于ToolStrip,通常由ToolStripStatusLabel对象组成,用于显示指…

【Qt】在QtCreator中编译log4cplus

在QtCreator中编译log4cplus 一、在QtCreator中配置cmake二、编译log4cplus1、下载2、编译、安装一、在QtCreator中配置cmake 参见博客:https://blog.csdn.net/u010168781/article/details/107613606 log4cplus使用cmake来编译,因此需要QtCreator支持cmake 二、编译log4cpl…

IEEE“撑不住”了?声明解除对华为评审限制

整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)6 月 2 日,IEEE 官方发表声明表示:经美国商务部就出口管制条例在 IEEE 出版活动中的适用性做出的说明,华为及其子公司的员工可以参加 IEEE 出版过程的同行评审和编辑工作…

关于软件产业的两个契机

软件产业是一个产业 , 和其它的产业一样 , 有各种角色分工 。 未来的软件是跨行业的 。 未来 , 软件会将各个行业联系在一起 。 云计算是第一代互联网发展到成熟的标志 。 网格计算是第二代互联网的开始 。 软件产业 在 未来 会 分为 平台&a…

java继承中的一些该注意的问题

关于继承,我想大多数人都知道,它是面向对象语言中的三大特性之一,所以在这里,关于继承的概念等我就不做详细介绍了,我主要就讲一下大家对他的认识中一些比较容易犯的错误吧。 错误认识1、继承,是将父类中所…

【C】printf warning: unknown conversion type character ‘l‘ in format [-Wformat=]

1、问题描述 在使用printf、fprintf打印long long类型时报错 printf warning: unknown conversion type character l in format [-Wformat=]2、原因分析 “%lld” 和 “%llu” 是 linux 下 gcc/g++ 用于 long long int 类型 (64 bits) 输入输出的格式符。 而 “%I64d” 和 “…

史上最强最贵Mac Pro诞生,iPadOS和iOS分家!WWDC19全面总结

作者 | 俞佳兴、胡巍巍转载自CSDN(ID:CSDNnews)图片&视频 | 余佳兴摄自美国圣何塞WWDC现场一年一度的WWDC终于来了!43岁的苹果,产品经验位居世界前列。一个迈入中年的公司,该如何持续做出让人惊艳的产品…

Java 抽象类与接口的区别

接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人&…

XMOVE3.0手持终端——软件介绍(五):在2KB内存的单片机上实现的T9中文输入法

编者注: X-MOVE是作者在业余时间于2010年6月份启动的以运动传感开发,算法和应用的平台,目前已经发展了三个版本,第四版的开发接近尾声。发布在博客园仅为交流技术,不存在商业目的,作者保留一切权利。 一. 综…

推荐系统遇上深度学习,9篇阿里推荐论文汇总!

作者 | 石晓文转载自小小挖掘机(ID: wAIsjwj)业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了。前面九篇文章中,有三篇是召回阶…

ReSharper修改命名风格

默认情况下,ReSharper会建议你全局变量命名使用下划线开头,且第一个字母小写。否则,会给你标记出来,如下: 但我个人不喜欢这种风格,一般使用首字母大写且不带下划线,可以通过配置来调整&#xf…

【Qt】Log4Qt(一)下载、编译

Log4Qt(一)下载、编译 1、下载2、编译2.1 单独编译成库2.2 将源码添加到项目中2.2.1 log4qt.pri分析2.2.2 pro示例如下1、下载 github上星最多的是这个:https://github.com/MEONMedical/Log4Qt 下载log4qt最新(截止2021-12-04)的稳定版本v1.5.1(Qt版本需要Qt5.7.0以上)…

android:退出程序

http://kofi1122.blog.51cto.com/2815761/703751 使用的是定义全局变量的方法

ubuntu中使用apt命令安装ipython失败解决方案

在最近使用ubuntu安装ipython时,出现如下报错: 出现这个问题,主要是因为apt还在运行,故解决方案为: 1、找到并且杀掉所有的apt-get 和apt进程 运行下面的命令来生成所有含有 apt 的进程列表,使用ps和grep命…

【Qt】Log4Qt(二)使用

Log4Qt(二)使用 1、使用TTCCLayout 格式化输出1.1 添加头文件1.2 配置根记录器的输出格式1.3 注册记录器,并输出日志2、最简代码3、将日志写入文件4、使用配置文件:log4qt.properties5、使用配置文件:QSettings6、周期性生成日志文件7、滚动生成日志文件(可以指定日志文件…

B站超全分享!2万人收藏的免费计算机科学速成课

整理 | 一一出品 | AI科技大本营(ID:rgznai100)作为一枚程序员,很多人可能都不太能清晰地说出计算机发展脉络,要想成为优秀的程序员,只会编程是不够的。“读史使人明智”,我们还要了解计算机理论知识&#…

图说:Windows 8使用搜索,快速开启应用

在Windows 8中,“开始菜单”变成的“开始屏幕”,想快速找到需要的应用不是件容易的事,毕竟桌面可以安装太多的应用。 怎么快速找到需要的应用的,其实方法也非常简单,只需在“开始屏幕”下使用键盘,键入需要…

一个可以卷起来的蓝牙键盘,简直是办公码字神器!

作为一个办公室码字党,熊大大一直觉得ipad最大的bug就是码字不方便。以前,我每次码字都会把平板先平放,打字才能顺手╮(╯﹏╰)╭后来买了蓝牙键盘,码字方便了,但键盘又大又厚重,日常携带巨不方…

比较v-bind和v-model

简单来说,区别如下:1.v-bind用来绑定数据和属性以及表达式,缩写为:2.v-model使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用 一、v-model v-model多在表单中使用,在表单元素上创建双…

【Qt】Log4Qt(四):周期性输出日志,并且限制日志文件数量

在Log4Qt中存在一个比较大的问题,当使用 DailyRollingFileAppender对日志进行输出时,会无限输出文件,也就是说,当系统运行很久时,日志文件有可能很大,大到无法想象。因此,很多开发者希望在DailyRollingFileAppender中加一个属性,用于配置日志文件的个数。 1、dailyrol…

g13 root

1.官方解锁: 官方已经给出了wildfire S的解锁bootloader教程。需要注意的是,这个解锁之后虽然仍是s-on状态(但下边一行显示了unlock),不影响我们将来随意刷机,说白了就相当于s-off了。 准备工作&#xff0c…

【Qt】Log4Qt(三)源码分析

Log4Qt(三)源码分析 1、分层架构1.1 核心对象1.2 支持对象2、源码分析2.1 宏2.1.1 LOG4QT_DECLARE_QCLASS_LOGGER2.1.2 LOG4QT_DECLARE_STATIC_LOGGER2.2类2.2.1 Log4Qt::ClassLogger2.2.2 LogManager2.2.3 PropertyConfigurator2.3 深入理解 rootLogger、logLogger、qtLogge…

GitHub五万星登顶,程序员命令行最全技巧宝典!

作者 | 唐小引封图 | CSDN出品 | CSDN(ID:CSDNnews)一个项目 Get 所有命令行技巧!最近两天,「The Art of Command Line(命令行的艺术)」这个开源项目雄踞了 GitHub TOP 榜,直接以 51…

开源硬件:极客们的伟大理想

自 Dennis Allison 在 1975 年发布它的 Tiny BASIC 以来,他倡导的开放、共享的思想得到了多数开发者的认同,这些年,软件开源取得了令人瞩目的成绩。同时,他那句 “让我们站在彼此的肩膀,而不是彼此的脚趾上。”也变成了…

五年12篇顶会论文综述!一文读懂深度学习文本分类方法

作者 | 何从庆来源 | AI算法之心(ID:AIHeartForYou)最近有很多小伙伴想了解深度学习在文本分类的发展,因此,笔者整理最近几年比较经典的深度文本分类方法,希望帮助小伙伴们了解深度学习在文本分类中的应用。…

Failed to fetch http://mirrors.cloud.aliyuncs.com/

服务器版本:阿里云 ubuntu 16.04 问题:阿里云安装软件时,提示 W: Failed to fetch http://mirrors.cloud.aliyuncs.com/ubuntu/dists/xenial/InRelea se Could not resolve mirrors.cloud.…

【FFmpeg】使用sws_scale将AVFrame转换后的图像数据放入cv::Mat中

1、方法一,伪代码如下 cv::Mat mat; AVFrame avFrame; const int stride[] = {static_cast<int>(mat.step[0])}; ret =

Android之Adapter用法总结

本文转自http://kb.cnblogs.com/a/2328334/&#xff0c;转载请注明原出处。 Android之Adapter用法总结 作者&#xff1a;Devin Zhang 来源&#xff1a;博客园 发布时间&#xff1a;2012-01-20 22:33 阅读&#xff1a;1193 次 原文链接 [收藏] 1.概念 Adapter是连接后端数…

【FFmpeg】ffmpeg命令详解(一)

ffmpeg命令详解(一) 1、命令格式2、简述3、详细说明3.1 过滤器3.1.1 简单的过滤器图3.1.2 复杂的过滤器图3.2 流拷贝1、命令格式 ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...global_options:全局选项 input_…