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

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.mzph.cn/news/134329.shtml

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

相关文章

理解交叉熵(Cross Entropy)

交叉熵(Cross-Entropy)是一种用于衡量两个概率分布之间的距离或相似性的度量方法。在机器学习中,交叉熵通常用于损失函数,用于评估模型的预测结果与实际标签之间的差异。 在分类问题中,交叉熵损失函数通常用于多分类问…

项目构建工具maven的基本配置+idea 中配置 maven

👑 博主简介:知名开发工程师 👣 出没地点:北京 💊 2023年目标:成为一个大佬 ——————————————————————————————————————————— 版权声明:本文为原创文…

数据结构与算法—双链表

前言 前面有很详细的讲过线性表(顺序表和链表),当时讲的链表以单链表为主,但在实际应用中双链表有很多应用场景,例如大家熟知的LinkedList。 双链表与单链表区别 单链表和双链表都是线性表的链式实现,它们的主要区别在于节点结构…

一文掌握 Apache SkyWalking

Apache SkyWalking SkyWalking是一个开源可观测平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图,甚至跨云。它是一种现代APM,专为云原生、基于容器的分布式系…

【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解前言AlexNet讲解卷积层的作用卷积过程特征图的大小计算公式Dropout的作用AlexNet模型结构 AlexNet Pytorch代码完整代码总结 前言 AlexNet是…

【网络协议】

网络协议 1 网络通讯1.1 防火墙1.2 子网掩码1.3 网关1.4 2 SSH2.1 SSH2.2 SSH12.3 SSH2 3 Telnet4 Telnet/SSL5 NFS6 TFTP7 FTP8 SFTP9 HTTP10 HTTPS11 NAT12 加密 1 网络通讯 1.1 防火墙 所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法&…

技术分享 | app自动化测试(Android)-- 属性获取与断言

断言是 UI 自动化测试的三要素之一,是 UI 自动化不可或缺的部分。在使用定位器定位到元素后,通过脚本进行业务操作的交互,想要验证交互过程中的正确性就需要用到断言。 常规的UI自动化断言 分析正确的输出结果,常规的断言一般包…

蓝桥杯练习

即约分数 题目 思路 遍历所有的x&#xff0c;y&#xff0c;判断x/y是不是即越约分数。 代码 #include <iostream> using namespace std; int gcd(int x,int y) {int r;while(y!0){rx%y;xy;yr;}return x; } int main() {// 请在此输入您的代码int sum4039;//1/y和x/1都…

前端食堂技术周刊第 103 期:10 月登陆 Web 平台的新功能、TS 5.3 RC、React 2023 状态、高并发的哲学原理、Web 资源加载优先级

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;夏梦玫珑 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…

深入详解高性能消息队列中间件 RabbitMQ

目录 1、引言 2、什么是 RabbitMQ &#xff1f; 3、RabbitMQ 优势 4、RabbitMQ 整体架构剖析 4.1、发送消息流程 4.2、消费消息流程 5、RabbitMQ 应用 5.1、广播 5.2、RPC VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&am…

Danswer 接入 Llama 2 模型 | 免费在 Google Colab 上托管 Llama 2 API

一、前言 前面在介绍本地部署免费开源的知识库方案时&#xff0c;已经简单介绍过 Danswer《Danswer 快速指南&#xff1a;不到15分钟打造您的企业级开源知识问答系统》&#xff0c;它支持即插即用不同的 LLM 模型&#xff0c;可以很方便的将本地知识文档通过不同的连接器接入到…

webgoat-Sensitive Data Exposure 敏感信息泄露

insecure login不安全的登录 Encryption is a very important tool for secure communication 0x02 点击login&#xff0c;可以看到payload里的username和password&#xff0c;输入后点击submit即可。 这题的目的是说明&#xff0c;信息传输过程中需要加密&#xff0c;如不…

论文阅读——What Can Human Sketches Do for Object Detection?(cvpr2023)

论文&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Chowdhury_What_Can_Human_Sketches_Do_for_Object_Detection_CVPR_2023_paper.pdf 代码&#xff1a;What Can Human Sketches Do for Object Detection? (pinakinathc.me) 一、 Baseline SBIR Fram…

React动态生成二维码和毫米(mm)单位转像素(px)单位

一、使用qrcode.react生成二维码&#xff0c;qrcode.react - npm 很简单&#xff0c;安装依赖包&#xff0c;然后引用就行了 npm install qrcode.react或者 yarn add qrcode.react直接上写好的代码 import React, {useEffect, useState} from react; import QRCode from qr…

号牌模拟数据生成

说明 自己开发的测试数据生成工具&#xff0c;用于生成数据训练对应模型。 项目 效果

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字&#xff1a; Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff09;和 C 的强…

Langchain-Chatchat-win10本地安装部署成功笔记(CPU)

Langchain-Chatchat&#xff08;原Langchain-ChatGLM&#xff09;基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain。 开源网址&#xff1a;https:…

爬取Elastic Stack采集的Nginx内容

以下是一个简单的Go语言爬虫程序&#xff0c;用于爬取Elastic Stack采集的Nginx内容。请注意&#xff0c;这只是一个基本的示例&#xff0c;实际使用时可能需要根据具体情况进行修改和扩展。 package mainimport ("fmt""net/http""io/ioutil" )…

Servlet详解

一.Servlet生命周期 初始化提供服务销毁 1.测试生命周期 package com.demo.servlet;import javax.servlet.*; import java.io.IOException;public class LifeServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {…

layui form 中input输入框长度的统一设置

Layui.form中使用class"layui-input-inline"就可轻松将元素都放到一行&#xff0c;但如果元素过多&#xff0c;就会自动换行。那就需要手动设置input框的长度。 像这种情况&#xff1a; 其实只需要添加css样式就可修改了 .layui-form-item .layui-input-inline {wid…