你应该知道的10种Python文件系统方法

使用os和shutil操作文件和文件夹

你可以编写Python程序来与文件系统进行交互来做很酷的事情。怎么做并不总是非常清楚。本文是当前和有抱负的开发人员和数据科学家的指南。我们将重点介绍10个基本的 os 和 shutil 命令,以便您可以编写脚本来自动化与文件系统的交互。

像文件系统一样文件系统有点像房子。假设您正在进行春季清洁,您需要将笔记本盒从一个房间移动到另一个房间。

目录就像盒子。他们持有东西。这些盒子就像目录一样。他们持有东西。在这种情况下,笔记本。

笔记本就像文件一样。您可以读取和写入它们。您可以将它们放在目录框中。Capiche?

在本指南中,我们将介绍 os 和 shutil 模块中的方法。所述 OS 模块是用于与操作系统进行交互的主要Python模块。该 shutil 模块还包含了高层次的文件操作。出于某种原因,您使用 操作系统创建目录,但移动并使用 shutil 复制它们。去搞清楚。:smirk:。

更新:于2019年2月16日增加的pathlib

在Python 3.4中, pathlib 模块被添加到标准库中以改进文件路径的使用,从3.6开始,它与标准库的其余部分很好地配合使用。该 pathlib 方法提供了我们将在下面讨论的方法解析文件路径一些好处-即 pathlib将 路径作为对象而不是字符串。虽然 pathlib 很方便,但它没有我们将要探索的所有低级功能。此外,您无疑会在未来几年 内在 代码中看到 os 和 shutil 方法。所以熟悉它们绝对是个好主意。

我打算在以后的文章中讨论 pathlib ,所以请跟我来确保你不要错过它。要立即了解有关 pathlib 模块的更多信息,请参阅 本文 和 本文 。

在我们挖掘之前要了解的其他一些事情:

本指南适用于Python 3.在2020年1月1日之后将不再支持Python 2 。您需要将os和shutil导入到您的文件中才能使用这些命令。我的示例代码可以在GitHub上找到。用下面引号中的参数替换你自己的参数。现在我们已经完成了背景,让我们开始吧!这是您应该知道的10个命令的列表。

10文件系统方法

下面的列表遵循以下模式:

方法 - 描述 - 等效的macOS Shell命令

获取信息

os.getcwd() - 将当前工作目录路径作为字符串 - pwdos.listdir() - 获取当前工作目录的内容作为字符串列表lsos.walk("starting_directory_path")- 返回一个生成器,其中包含当前目录和所有子目录中的目录和文件的名称和路径信息 - 没有确切的短CLI等效,但ls -R提供子目录名称和子目录中文件的名称改变一切

os.chdir("/absolute/or/relative/path") - 更改当前工作目录 - cdos.path.join()- 创建一个路径供以后使用 - 没有短的CLI等价物os.makedirs("dir1/dir2") - 制作目录 - mkdir -pshutil.copy2("source_file_path", "destination_directory_path") - 复制文件或目录 - cpshutil.move("source_file_path", "destination_directory_path") - 移动文件或目录 - mvos.remove("my_file_path") - 删除文件 - rmshutil.rmtree("my_directory_path")- 删除目录及其中的所有文件和目录 - rm -rf来!我们讨论一下。

欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,有企业招人!是一个非常不错的交流基地!群号:556370268

获取信息

os.getcwd() os.getcwd()以字符串形式返回当前工作目录。那一个是直截了当的。:smile:

os.listdir() os.listdir()以字符串列表的形式返回当前工作目录的内容。那一个也很简单。:smile:

os.walk("my_start_directory")

os.walk() 创建一个生成器,可以返回有关当前目录和子目录的信息。它通过指定的起始目录中的目录工作。

os.walk() 为它遍历的每个目录返回以下项:

1.当前目录路径作为字符串当。

2.当前目录中的子目录名称作为字符串列表。

3.当前目录中的文件名作为字符串列表。

它为每个目录执行此操作!

它的使用常常是有用的

os.walk() 一个 用于 循环遍历目录及其子目录的内容。例如,以下代码将打印当前工作目录的目录和子目录中的所有文件。

import os

cwd = os.getcwd()

for dir_path, dir_names, file_names inos.walk(cwd):

for f in file_names:

print(f)这就是我们获取信息的方式,现在让我们看看更改工作目录或移动,复制或删除文件系统部分的命令。

改变一切

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

此方法将当前工作目录更改为提供的绝对路径或相对路径。

如果您的代码随后对文件系统进行了其他更改,那么在使用此方法和try-except时处理引发的任何异常都是一个好主意。否则,您可能正在删除不想删除的目录或文件。:cry:

os.path.join() 该 os.path 模块有许多用于常见路径名操作的有用方法。您可以使用它来查找有关目录名称和目录名称部分的信息。该模块还具有检查文件或目录是否存在的方法。

os.path.join() 通过将多个字符串连接到一个漂亮的文件路径,可以创建一个适用于大多数操作系统的路径.

这是 文档中 的描述:

智能地加入一个或多个路径组件。返回值是 路径 和 *路径的 任何成员的串联, os.sep 在每个非空部分之后只有一个目录separator(),除了最后一个....

基本上,如果您使用的是Unix或macOS系统,请 os.path.join() 在您提供的每个字符串之间添加正斜杠(“/”)以创建路径。如果操作系统需要“\”,则 join 知道使用反斜杠。

os.path.join() 还向其他开发人员提供了您正在创建路径的 明确信息 。绝对使用它而不是手动字符串连接,以避免看起来像一个菜鸟。:wink:

os.makedirs("dir1/dir2")

os.makedirs() 制作目录。该 mkdir() 方法也可以创建目录,但它不会创建中间目录。所以我建议你使用 os.makedirs() 。

shutil.copy2("source_file", "destination") 有许多方法可以在Python中复制文件和目录。shutil.copy2() 是一个很好的选择,因为它试图尽可能多地保留源文件的元数据。

image

移动东西shutil.move("source_file", "destination")

使用 shutil.move() 更改文件的位置。它 copy2 在引擎盖下用作默认值。 os.remove("my_file_path") 有时您需要删除文件。 os.remove() 是你的工具。

shutil.rmtree("my_directory_path")

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

删除东西小心删除东西的功能!您可能希望使用print()打印将作为空运行删除的内容。然后在你确定它不会删除错误的文件时,在你的删除函数中运行print()。在 使用Python自动化无聊的东西时, 向Al Sweigart提出了这个想法。这是完整的列表。

10文件系统方法回顾

下面的列表遵循以下模式: 方法 - 描述 - 等效的macOS Shell命令

获取信息

os.getcwd() - 将当前工作目录路径作为字符串 - pwd

os.listdir() - 获取当前工作目录的内容作为字符串列表 - ls

os.walk("starting_directory_path") - 返回一个生成器,其中包含当前目录和所有子目录中的目录和文件的名称和路径信息 - 没有确切的短CLI等效,但 ls -R 提供子目录名称和子目录中文件的名称改变一切 os.chdir("/absolute/or/relative/path") - 更改当前工作目录 - cd

os.path.join() - 创建一个路径供以后使用 - 没有短的CLI等价物 os.makedirs("dir1/dir2") - 制作目录 - mkdir-ps

hutil.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

Wrap

现在您已经看到了在Python中与文件系统交互的基础知识。在IPython解释器中尝试这些命令以获得快速反馈。然后向其他人解释它们以巩固您的知识。如果你在家里搬了一盒笔记本电脑,你就不那么痛了。:house:但是运动会很好,所以现在你可以去健身房了。 ️♀️

如果你想深入了解,请查看免费电子书 自动化Python的无聊东西 。

如果您想了解使用Python从文件中读取和写入,请查看 open 函数 。记得像这样使用上下文管理器: with open(‘myfile’) as file: .:smile:

我希望你发现这个Python文件系统操作介绍很有用。如果您这样做,请在您最喜欢的社交媒体渠道上分享,以便其他人也可以找到它。

我写的是关于Python,Docker,数据科学等等。如果您对此感兴趣,请 在此处 阅读更多内容并按照我的说明进行操作。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容