Python学习-shutil模块和OS模块学习

news2024/11/26 17:51:23

shutil模块

针对文件的拷贝,删除,移动,压缩和解压操作

在这里插入图片描述

# 1.copyfileobj只能复制文件内容,无法复制权限

#复制文件时,要选择自己有权限的目录执行操作,创建的文件会根据系统umask设定的参数来指定用户权限
```shell
[student@server1 tmp]$ ll /etc/passwd
-rw-r--r-- 1 root root 2.7K  715 09:02 /etc/passwd
#-----------------------------------------------------------
with open("/etc/passwd", mode="r") as fr:
    with open("/tmp/mypasswd",mode="w") as fw:
        shutil.copyfileobj(fr,fw)
#-----------------------------------------------------------
[student@server1 tmp]$ ll /tmp/mypasswd 
-rw-rw-r-- 1 student student 2.7K 116 10:53 /tmp/mypasswd
# 2.copyfile只能复制文件内容,无法复制权限
```shell
[student@server1 tmp]$ ll /tmp/myresolv.conf 
-rw-rw-r-- 1 student student 53 116 11:01 /tmp/myresolv.conf
#---------------------------------------------------------
shutil.copyfile("/etc/resolv.conf","/tmp/myresolv.conf")
#---------------------------------------------------------
[student@server1 tmp]$ ll /etc/resolv.conf 
-rw-r--r-- 1 root root 53 116 07:52 /etc/resolv.conf
# 3.copy将文件src复制到文件或目录dst,包含权限
[student@server1 tmp]$ ll /etc/hosts 
-rw-r--r-- 1 root root 674 1031 09:50 /etc/hosts
#---------------------------------------------------------
shutil.copy("/etc/hosts","/tmp/myhosts")
#---------------------------------------------------------
[student@server1 tmp]$ ll /tmp/myhosts 
-rw-r--r-- 1 student student 674 116 11:04 /tmp/myhosts
# 4.move递归将文件或目录移动到另一个位置,并返回目标
[student@server1 tmp]$ ll /tmp/myhosts 
-rw-r--r-- 1 student student 674 116 11:04 /tmp/myhosts
#---------------------------------------------------------
shutil.move("/tmp/myhosts","/home/student/hosts.move")
#---------------------------------------------------------
[student@server1 tmp]$ ll /tmp/myhosts
ls: 无法访问 '/tmp/myhosts': 没有那个文件或目录
[student@server1 tmp]$ ll /home/student/hosts.move 
-rw-r--r-- 1 student student 674 116 11:04 /home/student/hosts.move
# 5.copytree递归复制以src为根的整个目录树,返回目标目录,由dst命名的目标不能存在(存在会报错),复制时注意文件目录权限
shutil.copytree("/home/student","/tmp/security")
----------------------------------------------------------
# 6.rmtree删除整个目录树,路径必须指向目录,空目录或者非空目录都可使用
[student@server1 test]$ ll
总用量 8.0K
-rw-r--r-- 1 student student 674 116 11:28 hosts
-rw-r--r-- 1 student student  53 116 11:28 resolv.conf
# -----------------------------------------------------------
shutil.rmtree("/tmp/test")
# ------------------------------------------------------------
[student@server1 test]$ ll
总用量 0
# 7.copymode复制权限,将权限位从src复制到dst,文件内容,所有者和组不受影响
[student@server1 test]$ ll
总用量 4.0K
-rw-r--r-- 1 student student 674 116 11:35 hosts
[student@server1 test]$ ll /etc/shadow
---------- 1 root root 1.5K  812 06:52 /etc/shadow
#----------------------------------------------------
shutil.copymode("/etc/shadow","/tmp/test/hosts")
#----------------------------------------------------
[student@server1 test]$ ll
总用量 4.0K
---------- 1 student student 674 116 11:35 hosts
# 8.chown更改路径的所有者用户和组
[student@server1 test]$ ll
总用量 4.0K
-rwxrwxrwx 1 student root 674 116 11:35 hosts
# ---------------------------------------------------
shutil.chown("/tmp/test/hosts",user="student",group="student")
# ------------------------------------------------------------
[student@server1 test]$ ll
总用量 4.0K
-rwxrwxrwx 1 student student 674 116 11:35 hosts

os 模块

在这里插入图片描述

print("当前工作目录:%s"%os.getcwd())
print("进程ID:%d" %os.getpid())
print("父进程ID:%d" %os.getppid())
print("系统环境变量:%s"%os.environ)
print("获取uname信息:%s"%str(os.uname()))
print("CPU核数:%s"%os.cpu_count())
print("查看当前目录下的文件:%s"%os.listdir("."))
os.chdir('/tmp/')
os.makedirs("./first")
print("当前目录:%s"%os.getcwd())
# remove删除文件
[student@server1 first]$ pwd
/tmp/first
[student@server1 first]$ ll
总用量 0
-rw-rw-r-- 1 student student 0 116 14:48 a.txt
# ------------------------------------------------
os.remove("first/a.txt")
# ------------------------------------------------
[student@server1 first]$ ll
总用量 0
# rmdir只能删除空目录
os.rmdir("first")
print("获取路径中携带的文件名:%s"%os.path.basename('/tmp/test/abc'))
print("获取路径中携带的文件目录:%s"%os.path.dirname("/tmp/test/abc"))
#split(),路径切割,从最右边/开始
print(os.path.split("/tmp/test/abc"))
#join()路径拼接
print(os.path.join("/tmp/test",'abc'))
# 判断路径是否为绝对路径
print(os.path.isabs('/tmp/test/abc'))
# 判断路径是否为相对路径
print(os.path.isdir('tmp/test/abc'))
# 判断是否为文件
print(os.path.isfile('tmp/test/abc'))
# 判断是否为链接文件
print(os.path.islink('tmp/test/abc'))
# 判断文件是否存在
print(os.path.exists('tmp/test/abc'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 18.04.6 LTS安装docker和docker-compose、镜像导入导出

Ubuntu 18.04.6 LTS安装docker和docker-compose、镜像导入导出 文章目录 Ubuntu 18.04.6 LTS安装docker和docker-compose、镜像导入导出安装docker更新数据源,安装必要插件添加GPG密钥设置存储库再更新apt包索引安装docker-ce查看docker状态运行docker hello-world …

医学专题(6)--多组学在肿瘤分型研究中的应用思路

研究背景 肿瘤免疫分型的由来:每一种肿瘤,甚至每一位患者的肿瘤浸润免疫细胞都存在差异,研究者根据免疫细胞浸润的特点将肿瘤大致分为“冷”肿瘤和“热”肿瘤,此概念的提出是肿瘤免疫分型的雏形。 对肿瘤免疫分型的研究有很多&a…

HDFS速通之一文详解HDFS全部知识点

文章目录 HDFS介绍HDFS体系HDFS的Shell介绍HDFS的常见Shell操作 HDFS案例实操Java操作HDFS配置环境 HDFS的回收站HDFS的安全模式实战:定时上传数据至HDFSHDFS的高可用和高扩展HDFS的高可用(HA)HDFS的高扩展(Federation) HDFS介绍 HDFS是一个分布式的文件系统 假设…

二叉树的最大深度(C++解法)

题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2…

2005-2021年全国各省家庭承包耕地面积和家庭承包耕地流转总面积数据(无缺失)

2005-2021年全国各省家庭承包耕地面积和家庭承包耕地流转总面积数据 1、时间:2005-2021年 2、来源:农村经营管理统计NB 3、指标:家庭承包经营耕地面积、家庭承包耕地流转总面积(单位:亩) 4、范围&#…

MVC、MVP、MVVM区别

MVC、MVP、MVVM区别 MVC(Model-View-Controller) 。是一种设计模式,通常用于组织与应用程序的数据流。它通常包括三个组件:模型(Model)、视图(View)和控制器(Controller&…

【OpenVINO】基于 OpenVINO C++ API 部署 RT-DETR 模型

基于 OpenVINO C API 部署 RT-DETR 模型 1. RT-DETR2. OpenVINO3. 环境配置4. 模型下载与转换4.1 模型导出4.2 模型信息对比 5. C代码实现5.1 模型推理类实现 5.2 模型数据处理类RTDETRProcess6. 预测结果展示7. 总结 RT-DETR是在DETR模型基础上进行改进的,一种基于…

JAR 文件规范详解

介绍 JAR文件是基于ZIP文件格式的一种文件格式,用来将许多文件整合成一个文件。一个JAR文件本质上是包含可选目录META-INF的zip文件,可以通过命令行jar工具或者在Java平台上使用java.util.jar中的API来创建。JAR文件的命名没有严格的要求,可…

Flink SQL Regular Join 、Interval Join、Temporal Join、Lookup Join 详解

Flink ⽀持⾮常多的数据 Join ⽅式,主要包括以下三种: 动态表(流)与动态表(流)的 Join动态表(流)与外部维表(⽐如 Redis)的 Join动态表字段的列转⾏&#xf…

Redis5 分布式系统之主从模式

目录 分布式系统 引子 分布式系统类型 主从模式 一个主节点和多个从节点 创建多个节点方法 配置主从结构 主从模式知识 主从复制 拓扑结构 1.一主一从 2.一主多从 3.树形主从 主从实现原理 psync数据同步 全量复制和部分复制 psync流程 1.全量数据同步 2.部…

Android Studio代码无法自动补全

Android Studio代码自动无法补全问题解决 在写layout布局文件时,代码不提示,不自动补全,可以采用如下方法: 点击File—>Project Structure,之后如图所示,找到左侧Modules,修改SDK版本号&…

2023年广东省安全员C证第四批(专职安全生产管理人员)证考试题库及广东省安全员C证第四批(专职安全生产管理人员)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年广东省安全员C证第四批(专职安全生产管理人员)证考试题库及广东省安全员C证第四批(专职安全生产管理人员)试题解析是安全生产模拟考试一点通结合(安监…

船舶IMO识别码是什么?

船舶编码和编码体系比较多,主要有船舶登记号、船检登记号、船舶呼号、IMO号、船舶MMSI、船体号等。 船舶的IMO Number(国际海事组织识别码,下称IMO识别码)是独一无二的,相当于船舶的身份证号码,并且此号码…

Uniapp实现多语言切换

前言 之前做项目过程中,也做过一次多语言切换,大致思想都是一样的,想了解的可以看下之前的文章C#WinForm实现多语言切换 使用i18n插件 安装插件 npm install vue-i18n --saveMain.js配置 // 引入 多语言包 import VueI18n from vue-i18n…

【MySQL--->索引】

文章目录 [TOC](文章目录) 一、索引概念二、B树与B树1.B树的特点:2.B树的特点:3.为什么使用B树而不使用B树 三、聚簇索引和非聚簇索引四、索引操作1.创建索引2. 删除索引3.全文索引 一、索引概念 mysql的查询的过程是从文件中提取到内存中查询,MySQL启动时会在内存中维护一个b…

fastjson 1.2.24 rce漏洞复现

一、漏洞特征 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符…

VR全景如何助力乡村振兴,乡村发展在哪些方面用到VR全景技术

引言: 乡村振兴是当今中国发展的重要战略,也是推动农村经济社会全面发展的关键举措。在这一过程中,虚拟现实(VR)全景技术正逐渐崭露头角,为乡村振兴提供了机遇。 一.VR全景技术的概念和应用 1…

vue项目中订单完成提交按钮动画

1. 动画1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Order</title><!-- <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/re…

CreateProcess error=206, 文件名或扩展名太长

IDEA编译启动springboot项目时&#xff0c;提示这个异常&#xff0c;可以使用以下方式解决&#xff1a; 打开run-->edit configurations-->选择你启动报错的AppLication&#xff0c;如下图配置即可&#xff08;仅限于楼主的解决方式&#xff0c;不保证百分百覆盖&#x…

docker部署mysql nginx redis

一.创建网络 # 创建网络 docker network create liming # 查看网络 docker network ls二.部署mysql 删除并重新创建mysql容器&#xff0c;并完成本地目录挂载&#xff1a; 挂载/software/mysql/data到容器内的/var/lib/mysql目录挂载/software/mysql/init到容器内的/docker-…