广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python常用标准库之os模块与shutil模块怎么使用
  • 280
分享到

Python常用标准库之os模块与shutil模块怎么使用

2023-06-30 18:06:48 280人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“python常用标准库之os模块与shutil模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python常用标准库之os模块与shutil模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入

本文小编为大家详细介绍“python常用标准库之os模块与shutil模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python常用标准库之os模块与shutil模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

系统模块

import os

系统模块用于对系统进行操作。

常用方法

os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作、文件的删除创建等详细资料可以参考官方文档。

system -- 执行系统命令

参数的数据类型是字符串格式,内容是系统指令。执行时,直接返回系统输出。

import osos.system('ifconfig')  # linux系统shell命令os.system('ipconfig')  # windows系统dos命令

popen -- 执行系统命令

在使用system执行系统命令的时候,发现在windows系统下执行命令时,中文字符发生了乱码!这是因为windows为减少占用,对中文系统使用GB格式编码,而python中默认使用的UTF-8编码,编码不兼容导致了乱码问题。

popen也可以执行系统指令,但是和system的工作方式不一样。

popen执行系统指令之后返回对象,通过内置方法read读出字符串,这个过程中read方法自动的将其它编码转换成为了UTF-8格式,所以popen相比system有更高的可读性和兼容性。

而在实际的使用过程中,发现popen不存在阻塞,即在执行一些长时间系统任务的时候,不会等待系统任务结束,python代码就会继续执行,在某些场景下会导致问题的出现。比如在我的一个场景中,要将一个文件夹中的文件删除,之后在重写一份文件,使用popen导致文件还没有删除,而代码继续执行使新文件已经写好,而这个时候popen又将我新写的文件删除,导致我的程序在后续出现bug。所以,如果没有可读性的要求,我建议优先使用system方法。

import osobj = os.popen('ipconfig')res = obj.read()print(res)

listdir -- 获取指定文件夹中的所有文件

获取指定文件夹中的所有文件(包括文件和文件夹),返回文件的名称,以列表的形式返回,默认情况为当前路径。

import os# 默认为当前路径files = os.listdir()print(files)# 相对和绝对路径都可以使用files = os.listdir('C:')print(files)

walk -- 递归遍历目录

递归遍历指定目录,包括其所有的子目录,返回一个迭代器对象。迭代器每次返回一个元组,元组为三个元素:

  • 第一个元素为字符串,表示当前目录路径;

  • 第二个元素为列表,表示当前目录下的所有文件夹名(不包括子目录中的);

  • 第三个元素为列表,表示当前遍历目录中的所有文件名(不包括子目录中的);

主要参数含义
top指定目录;
topdown正序遍历还是倒序遍历,默认为True(正序);

请看下例,目录结构如下:

Python常用标准库之os模块与shutil模块怎么使用

import ospath = r'C:\Users\MSR\Desktop\test'# 正序遍历res = os.walk(path)  # 返回迭代器for i in res:    print(i)r"""('C:\\Users\\MSR\\Desktop\\test', ['1', '2'], ['root.txt'])('C:\\Users\\MSR\\Desktop\\test\\1', ['111'], ['1.txt'])('C:\\Users\\MSR\\Desktop\\test\\1\\111', [], ['11.txt'])('C:\\Users\\MSR\\Desktop\\test\\2', [], ['2.txt'])"""# 倒序遍历(优先展示最深子目录)res = os.walk(path, topdown=False)for i in res:    print(i)r"""('C:\\Users\\MSR\\Desktop\\test\\1\\111', [], ['11.txt'])('C:\\Users\\MSR\\Desktop\\test\\1', ['111'], ['1.txt'])('C:\\Users\\MSR\\Desktop\\test\\2', [], ['2.txt'])('C:\\Users\\MSR\\Desktop\\test', ['1', '2'], ['root.txt'])"""

getcwd -- 获取当前工作路径

import os# 获取当前的工作路径dir_path = os.getcwd()print(dir_path)  # E:\0-project\python\test# 获取当前文件的路径file_path = __file__  # 使用内置属性__file__获取print(file_path)  # E:/0-project/python/test/test3.py

注意:getcwd()获取的使用当前工作路径,__file__是获取当前文件的路径

对于这个注意事项,大家一定要铭记于心,因为我被人欺骗了,当然这应该算是PyCharm的坑吧!

注意了,文件的所在路径和工作路径是不相同的,文件的所在路径就是在系统中的这个脚本文件实实在在的地址,如果这个文件在C:\下,那么在任何的情况下这个文件的所在路径都是C:\;而工作路径不同,如果我们在C:\下执行这个python文件,那么我们的工作路径就是C:\,如果我们是在D:\下执行,那么我们的工作路径就是D:\,这就是文件所在地址和工作地址的区别,但是在一般情况下,我们执行文件都是在文件的所在地址执行的,所以大部分的时候文件所在路径和当前工作路径都是相同的。

可我在最开始学习这个方法的时候,我的老师教我说getcwd()的作用是获取文件的所在路径,那么是什么让我一直以为getcwd()的作用是获取文件的所在路径呢?是老师教给我的……感觉这个老师很不靠谱?那么老师怎么没有发现其中的含义呢?我怎么又一直深信不疑呢?我觉得这个一定是要pycharm来背锅了!我们在学习的时候一般都是相信自己的实际操作的结果的,我们执行的结果是什么,反复那么几次,我们的印象就会加深!

然后今天2021年12月7日20:58:09我在给公司的项目写一个启动脚本,目的是为了避免使用繁琐的命令去启动关闭项目,那么我在写的时候为了能够在系统的任何一个地方都是可以使用这个脚本,所以将命令中的各种路径全部写为绝对路径,我们系统工程师对绝对路径是非常熟练的!但是在我写好使用的时候就发现程序根本就启动不起来,已启动就死掉了,我就开始找原因,后来我发现在程序的目录下启动就没有问题,在其它的地址启动就有问题,我就意识到这是路径的错误。当然我们是有日志的,我看日志说是配置文件相关的地方出现了错误,我一看,就很好奇,配置文件是在程序的目录中的,读取的时候使用相对路径来获取,但是却没有读到文件,但是我检查之后文件是存在的!那么这个问题就很明显了,工作路径出了问题。

但是我还疑惑,为什么会影响到相对路径吗?然后我就测试了getcwd,发现果然如此,getcwd返回的不是文件的所在地址而是当前所在的工作地址,这个时候我还不死心,因为当时老师说的不是这样,所以我以为是linux和windows的差异,所以我就咋爱windows中又测试了一遍,发现还是一样的。那么我就又疑惑了,怎么在pycharm中,工作路径始终都是文件的所在路径呢?然后我就发现原来pycharm中可以指定文件的工作路径,而且默认将当前的文件路径作为工作路径使用。

Python常用标准库之os模块与shutil模块怎么使用

然后我看文档介绍:Return a unicode string representing the current working directory.,emmm估计当时老师也是被pycharm坑了吧。所以大家以后如果想要在程序中固定工作路径,可以在启动文件中使用__file__获取,或者使用os.chdir方法。

然后最后还是在强调一下:工作路径会影响到相对路径的使用,但是不会影响到sys.pathpython的环境变量。

chdir -- 修改当前工作路径

之前我们有学过很多的函数,他们在涉及到路径的时候,一般默认情况都是当前脚本文件所在的目录(比如刚才的listdirgetcwd),如果将文件的默认工作路径修改,就会影响到其它的一些功能,比如说我们导入文件使用相对路径等,所以,谨慎使用。

import os# 在修改默认工作路径前使用print(os.getcwd())  # E:\0-project\python\test# chdir 修改当前文件工作的默认路径os.chdir('C:')# 在修改工作路径后使用print(os.getcwd())  # C:\

access -- 测试权限

用于测试一个指定路径或者文件的权限,返回True或者False。

语法:os.access(path, mode)

必要参数为path和mode,分别表示路径和测试的权限类型。

mode说明
os.F_OK是否存在;
os.R_OK是否可读;
os.W_OK是否可写;
os.X_OK是否可执行;

urandom -- 随机字节对象

返回包含适合加密使用的随机字节的bytes对象。

import os# 参数为字节长度key = os.urandom(1)print(key, len(key))# b'\x92' 1key = os.urandom(5)print(key, len(key))# b'\xde\x05/lh' 5

getpid&getppid -- 获取进程和父进程

getpid用于返回当前程序(脚本文件)的进程ID,getppid用于返回当前程序(脚本文件)的父进程ID。

# 获取进程唯一ID(PID)import os# getpid 返回当前进程的IDprint(os.getpid())  # 10784# getppid 返回父进程的ID# 如果父进程已退出,Windows计算机仍将运行返回其id;其他系统将返回“init”进程的id;print(os.getppid())  # 16468

cpu_count -- 获取CPU核心数(逻辑)

import osprint(os.cpu_count())"""结果:8"""

常用属性

enciron -- 操作环境变量

import os#  获取系统的所有环境变量ev_var = os.environprint(ev_var)# 获取系统指定的环境变量path_ev_var = os.environ['PATH']print(path_ev_var)# 添加环境变量os.environ['PATH'] += r':/home/msr'  # Linux使用冒号分隔os.environ['PATH'] += r';C:\Users\MSR'  # Windows使用分号分隔# 其实可以看到,环境变量其实就是一个特殊的字典,修改环境变量就是在操作一个字典数据而已

name & sep & linesep

import os# name 获取系统标识(Linux ->posix   windows -> nt)print(os.name)  # nt# sep 获取路径分隔符号print(os.sep)  # \# linesep 获取系统的换行符号print(repr(os.linesep))  # '\r\n'

文件操作

mknod & remove -- 新建&删除文件

windows系统不支持此方法。

import osos.mknod('test.txt')os.remove('test.txt')

mkdir & rmdir -- 创建&删除文件夹

import osos.mkdir('test_dir')os.rmdir('test_dir')

rename -- 重命名文件或文件夹

语法:rename(old_path, new_path)

import osos.rename('test.txt', 'hahaha.txt')

makedirs & removedirs -- 迭代创建&删除文件夹

import os# 迭代创建文件夹os.makedirs('a/b/c/d/e')# 迭代删除文件夹(文件夹中存在文件,则该文件夹不删除)os.removedirs('a/b/c/d/e')

路径模块

import os.path

路径模块也是系统模块中的一部分。

basename -- 返回路径中的文件名部分

import os.path# 该路径不一定真实存在file_path = r'..\学习笔记\day1笔记.py'file_name = os.path.basename(file_path)print(file_name)  # day1笔记.py

dirname -- 返回路径中目录部分

import os.pathfile_path = r'..\学习笔记\day1笔记.py'dir_path = os.path.dirname(file_path)print(dir_path)  # ..\学习笔记

split -- 将目录和文件名拆分成两部分

import os.pathfile_path = r'..\学习笔记\day1笔记.py'tuple_var = os.path.split(file_path)print(tuple_var)  # ('..\\学习笔记', 'day1笔记.py')print(type(tuple_var))  # 返回元组: <class 'tuple'>

join -- 将多个路径组合在一起

import os.pathpath2 = 'abc'path3 = '123'path4 = 'main.py'# 使用join组合path = os.path.join(path2, path3, path4)print(path)  # abc\123\main.py# 也可以使用 os.seppath = path2 + os.sep + path3 + os.sep + path4print(path)  # abc\123\main.py

splitext -- 将文件名分为文件名和后缀名

import os.path# 分开文件名file_name = 'main.py'res = os.path.splitext(file_name)print(res)  # ('main', '.py')print(type(res))  # <class 'tuple'># 分来完整路径file_path = r'..\学习笔记\day1笔记.py'res = os.path.splitext(file_path)print(res)  # ('..\\学习笔记\\day1笔记', '.py')print(type(res))  # <class 'tuple'># 也可以使用字符串内置方法 split 实现res = file_path.split('.')print(res)  # ['', '', '\\学习笔记\\day1笔记', 'py']print(type(res))  # <class 'list'>

getsize -- 获取指定文件的大小

import os.path# 获取指定文件的大小(单位:byte)file_size_byte = os.path.getsize('test.txt')

getctime -- 获取文件的创建时间

获取文件的创建时间,返回时间戳。(windows有明确的创建时间,linux只有最后一次的修改时间。)

import os.pathimport time# 获取文件创建时间stamp_time = os.path.getctime('./test.py')print(stamp_time)  # 1613989768.3445127# 配合 时间模块使用 获取时间print(time.ctime(stamp_time))  # Mon Feb 22 18:29:28 2021

getmtime -- 获取文件的最后一次修改时间

import os.pathimport time# 获取文件最后一次修改时间stamp_time = os.path.getmtime('./test.py')print(stamp_time)  # 1614037683.1067748# 配合 时间模块使用 获取时间print(time.ctime(stamp_time))  # Tue Feb 23 07:48:03 2021

getatime -- 获取文件最后一次访问时间

import os.pathimport time# 获取文件最后一次访问时间stamp_time = os.path.getatime('./test.py')print(stamp_time)  # 1635590737.799415# 配合 时间模块使用 获取时间print(time.ctime(stamp_time))  # Sat Oct 30 18:45:37 2021

isdir & isfile & islink -- 检查路径类型

不检查路径是否真实存在。

import os.path# 检查路径类型,返回布尔值:    # 不是对应类型或没有相应文件 : False    # 是对应类型:True# isdir 检查路径是否是文件夹res = os.path.isdir('test.txt')# isfile 检查路径是否是文件res = os.path.isfile('test.txt')# islink 检查路径是否是链接res = os.path.islink('test.txt')

isabs -- 检查路径是否是绝对路径

不检查路径是否真实存在

import os.path# 检查windows路径path = r'E:\小黄片'res = os.path.isabs(path)print(res)  # True# windows系统检查Linux路径path = r'/root/home'res = os.path.isabs(path)print(res)  # True

abspath -- 相对路径转成绝对路径

先检查一个路径是否是相对路径,是则将其转成绝对路径,反之不变。

转成绝对路径的规则是:以当前的工作路径为基准,根据相对路径中的相对级别,将对应级别的工作路径替换为原路径中的相对路径。

不检查路径是否真实存在。

import os.path# 绝对路径不改变path = r'E:\学习资料'new_path = os.path.abspath(path)print(new_path)  # E:\学习资料# 相对路径转成绝对路径path = r'..\学习资料'new_path = os.path.abspath(path)print(new_path)  # E:\0-project\python\学习资料# 根据级别自动转换path = r'..\..\学习资料'new_path = os.path.abspath(path)print(new_path)  # E:\0-project\学习资料# 如果相对的级别过多,就以根目录为准(不会报错)path = r'..\..\..\..\..\..\..\..\..\..\学习资料'new_path = os.path.abspath(path)print(new_path)  # E:\学习资料

exists -- 检查路径是否真实存在

检查路径是否真实存在,返回布尔值。

import os.path# 检查指定路径是否存在path = r'E:\小黄片'res = os.path.exists(path)print(res)  # False

文件复制移动模块(文件操作)

import shutil

用于对文件进行操作。

获取文件信息,获取文件信息,见系统模块。

copyfileobj -- 复制文件(内容)

只复制文件的内容,通过文件io操作,将一个文件的对象复制到另一个文件对象当中,因为需要在文件IO对象中操作,所以不推荐使用。

语法:copyfileobj(fsrc, fdst, length=16*1024)

copyfileobj(被复制文件对象,新文件对象,一次性读取字符数量。)

import shutilwith open('test.txt', 'r', encoding='UTF-8') as fp1 :   with open('test2.txt', 'w', encoding='UTF-8') as fp2 :      shutil.copyfileobj(fp1, fp2)

copyfile -- 复制文件(内容)

底层调用copyfileobj,使用方便快捷,所以推荐使用。

语法:copyfile(被复制文件路径, 新文件路径)

import shutilshutil.copyfile('test.txt', 'test2.txt')

copymode -- 复制文件(权限)

仅复制文件的权限,不复制文件的内容(被赋值权限的文件必须存在),语法和copyfile相同。

import shutilshutil.copymode('test.txt', 'test.txt')

copystat -- 复制文件(除了内容)

复制文件的所有的状态信息,包括各种日期、权限&hellip;&hellip;就是没有内容。

import shutilshutil.copystat('test.txt', 'test.txt')

copy & copy2 -- 复制文件

import shutil# 复制文件内容和权限shutil.copy('test.txt', 'test.txt')# 完整复制整个文件(包括状态、权限、内容……)shutil.copy2('test.txt', 'test.txt')

copytree -- 迭代复制文件夹中的所有

import shutilshutil.copytree('../学习笔记', '../学习笔记备份')

rmtree -- 迭代删除文件夹(即使文件夹中有文件)

import shutilshutil.rmtree('..\小黄片')

move -- 移动文件或文件夹

import shutilshutil.move('D:\学习资料', 'C:\我的心血')

读到这里,这篇“Python常用标准库之os模块与shutil模块怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: Python常用标准库之os模块与shutil模块怎么使用

本文链接: https://www.lsjlt.com/news/330867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python常用标准库之os模块与shutil模块怎么使用
    本文小编为大家详细介绍“Python常用标准库之os模块与shutil模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python常用标准库之os模块与shutil模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-30
  • 详解Python常用标准库之os模块与shutil模块
    目录系统模块常用方法常用属性文件操作路径模块文件复制移动模块(文件操作)copyfileobj -- 复制文件(内容)copyfile -- 复制文件(内容)copymode -- ...
    99+
    2022-11-11
  • python标准库模块之json库怎么使用
    今天小编给大家分享一下python标准库模块之json库怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言json,...
    99+
    2023-07-02
  • os模块与fnmatch模块怎么在python中使用
    本篇文章为大家展示了 os模块与fnmatch模块怎么在python中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyt...
    99+
    2023-06-08
  • python标准库logging模块怎么用
    本文小编为大家详细介绍“python标准库logging模块怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python标准库logging模块怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题1:如...
    99+
    2023-06-30
  • Python中shutil模块怎么使用
    这篇文章主要讲解了“Python中shutil模块怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中shutil模块怎么使用”吧!简介:shutil 模块提供了一系列对文件...
    99+
    2023-06-28
  • Python标准库之zipfile和tarfile模块的使用
    目录zip格式ZipFile参数说明操作含义压缩方法常用方法tar包 和 gz、bz2、xz格式操作tar包压缩解压缩删除压缩包中的文件在我们常用的系统windows和Linux系统...
    99+
    2022-11-11
  • Python标准库之Math,Random模块使用详解
    目录数学模块ceil -- 上取整floor -- 下取整四舍五入pow -- 幂运算sqrt -- 开平方运算fabs -- 绝对值modf -- 拆分整数小数copysign -...
    99+
    2022-11-11
  • python 之 os 模块的常见用法
    在Python的标准库os模块中包含普遍的操作系统功能os 模块引入的方法是: import os以下为 os 模块常见的使用方法:    1、os.getcwd 获取当前的工作目录,即程序执行的目录    2、os.name 字符串指示正...
    99+
    2023-01-31
    模块 常见 python
  • python标准库之time模块的语法与简单使用
    目录表示时间的方式 1. 调用语法: 2. time概述3. 时间获取4. 时间格式化(将时间以合理的方式展示出来)5. 程序计时应用6. 示例总结表示时间的方式 时间戳表示法: ...
    99+
    2022-11-12
  • python中os模块和sys模块怎么使用
    今天小编给大家分享一下python中os模块和sys模块怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、os模块o...
    99+
    2023-07-05
  • 怎么使用Python模块os
    本篇内容主要讲解“怎么使用Python模块os”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python模块os”吧!os.getcwd()返回当前工作目录绝对路径Python ...
    99+
    2023-06-02
  • python模块shutil函数怎么用
    小编给大家分享一下python模块shutil函数怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文大纲os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作。而Python另外一个标准库...
    99+
    2023-06-25
  • Python之shutil模块常用的函数有哪些
    这篇文章主要讲解了“Python之shutil模块常用的函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python之shutil模块常用的函数有哪些”吧!shutil 是 Pyth...
    99+
    2023-06-16
  • 详解Python常用标准库之时间模块time和datetime
    目录time时间模块time -- 获取本地时间戳localtime -- 获取本地时间元组(UTC)gmtime -- 获取时间元组(GMT)mktime -- 时间元组获取时间戳...
    99+
    2022-11-11
  • python标准库模块之json库的基础用法
    目录前言作用loads,load的用法dumps,dump的用法结语前言 json,全称为JavaScript Object Notation,也就是JavaScript对象标记,通...
    99+
    2022-11-13
  • python的os模块怎么使用
    本篇内容介绍了“python的os模块怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!os模块提供了多数操作系统的功能接口函数。当os...
    99+
    2023-06-27
  • python中的sys模块和os模块怎么用
    今天小编给大家分享一下python中的sys模块和os模块怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.sys模块...
    99+
    2023-06-29
  • Python的os包与os.path模块怎么用
    这篇文章主要介绍了Python的os包与os.path模块怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、os常用方法1.获取当前路径 os.getcwd()#&nb...
    99+
    2023-06-29
  • Python中os模块怎么用
    小编给大家分享一下Python中os模块怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言OS模块虽然基础的时候已经学过了,但是谁让本人属于那种不用立马就忘...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作