1、os模块

os表示操作系统,该模块主要处理与操作系统相关的操作。最常用的是文件操作:打开,读取,删除,复制,重命名。

重点掌握增删改查的函数操作。

import os
# 获取当前执行文件所在文件夹路径
print(os.getcwd())
输出结果:
C:\Users\wangt\PycharmProjects\new\20181210
   
# 修改当前的工作目录(将当前文件挪到目标文件夹中)
os.chdir("想要切换到的目标文件夹") #没有返回值

# 获取当前目录的字符串表现方式
print(os.curdir)  #(输出结果为.)
# 获取当前目录的父级的字符串表现方式
print(os.pardir)  #(输出结果为..)

# 创建多级目录,可以自动创建中间的目录
os.makedirs("a/b/c")
# 输出结果为在当前执行文件夹下新建了三级文件夹

# 只能创建单级目录 会把c1和c2当成已存在的路径
os.mkdir("c1/c2/b3")
# 输出结果为在当前文件夹下的c1/c2文件夹下创建了b3文件夹

# 删除一个文件夹,必须保证文件夹是空的,才能删除
os.rmdir("文件夹名称")  # 同级目录直接输文件夹名称,或者输入文件夹路径

# 如果要删除一个不为空的文件夹。思路是先遍历这个文件夹中的所有文件和文件夹,先把里面的内容全部删除,最后再删除文件夹
# 注意遍历删除文件时,listdir得到的是文件名称,需要手动拼接完整路径
path = r"C:\Users\wangt\PycharmProjects\new\20181210\aa" #想要删除的文件夹路径
for f in os.listdir("aa"):
   f_path=path+"\\"+f  #两个\\,第一个表示转义,相当于拼接出文件的路径
   os.remove(f_path)
os.rmdir("aa")
结果是文件夹aa都被删除(aa文件夹与当前执行文件同级)

# 获取文件属性
print(os.stat("test.py"))

# 获取当前的路径分隔符,当程序需要跨平台时,路径不能直接写死,要从os中获取。
print(os.sep)
windows下输出结果为:\

# 获取当前平台使用的换行符
print(os.linesep)

# 执行系统命令
os.system()
例如:os.system("dir")

# 显示当前操作系统的环境变量 (path是pycharm下的环境变量)
print(os.environ)
2、os下path小模块的使用
    path是os下的一个小模块,path意为路径,该模块用于处理路径相关问题,通常与os模块一起使用。
之所以用这个模块,是因为python是跨平台的,各平台的路径书写方式不同,所以将所有与路径相关的都进行了封装,使用了path后,程序在跨平台时就不会因为路径问题报错了
# 返回绝对路径,其实就是把当前执行文件所在的文件夹与用户给的参数进行拼接
print(os.path.abspath("test.py"))
输出结果:
C:\Users\wangt\PycharmProjects\new\20181210\test.py

# 将路径分割为文件夹和文件名
print(os.path.split(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果: #一个元组,两个元素
('C:\\Users\\wangt\\PycharmProjects\\new\\20181210', 'test0.py')  #双反斜杠是为了转义

# 获取路径中的文件名称
print(os.path.basename(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果:
test0.py

# 获取路径中的文件夹路径
print(os.path.dirname(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果:
C:\Users\wangt\PycharmProjects\new\20181210

# 判断一个文件路径是否存在
print(os.path.exists(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果为True或者False


# 判断文件是否是绝对路径,判断依据:第一个字符是不是路径分隔符,如果是则表示是绝对路径
print(os.path.isabs(r"C:\Users\wangt\PycharmProjects\new\20181219"))
输出结果为True或者False

# 判断路径是否是一个文件
print(os.path.isfile(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))  #输出结果为True或者False

# 判断路径是否是一个文件夹
print(os.path.isdir(r"C:\Users\wangt\PycharmProjects\new\20181210)) #输出结果为True或者False

# 以当前平台的路径分隔符来拼接路径,如果有多个盘符,取最后一个。
print(os.path.join("a","b"))
print(os.path.join("A:\\","B:\\","b"))  #A会被忽略
输出结果为:
a\b
B:\b
import os
# 获取项目的根目录
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# 拼接userData的完整路径,为了跨平台,使用os.path来处理路径
USERDATA_PATH = os.path.join(BASE_DIR,"DB","userData")


import sys,os
# 添加环境变量
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
# 导入配置文件
from conf import settings
# 访问配置文件中的用户数据路径
print(settings.USERDATA_PATH)
# 文件或者目录的最后存取时间
print(os.path.getatime(path))
# 文件或者目录的最后修改时间
print(os.path.getmtime(path))
# 返回文件大小
print(os.path.getsize(path))  # 输出结果单位为字节

# 返回规范化路径,大写变成小写,斜杠变成当前平台对应的斜杠等
print(os.path.normcase(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))

# 斜杠转换成当前系统对应的斜杠,同时还可以向上返回,得到上级路径
print(os.path.normpath(r"C:\Users\wangt\PycharmProjects\new\20181210\..")) #单次最多返回两级
print(os.path.normpath(r"C:\Users\wangt\PycharmProjects\new\20181210\..\..")) #向上四级
3、subprocess
subprocess称之为子进程,进程就是一个正在运行的程序,子进程是由另一个程序启动的程序。

使用子进程的目的:当程序自身无法处理某项任务时,需要通过另一个程序来处理,也就是子进程。
os.system在执行系统指令时,也可以命令操作系统启动某个程序。
os.system在执行时,直接把结果输出到了控制台,无法获取执行结果
subprocess不仅可以启动子进程,还能与子进程进行数据交互

当需要在python中启动一个子程序,并且可以进行数据交互时就是用subprocess。如果不需要数据交互,就使用os.system
import subprocess

dir表示要执行的命令
shell表示dir是一个命令
stdout指定输出管道:管道的作用就是把数据传输到另一个进程中,本质上就是读写同一个文件
   
# 启动一个dir子进程,并将结果输出到指定管道
p = subprocess.Popen("dir",shell=True,stdout=subprocess.PIPE)
print(p.stdout.read())   #stdout输出


# 启动一个tasklist子进程,指定输出结果到管道中
p1=subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
# 启动一个findstr子进程,将p1进程的结果作为p2进程输入
p2=subprocess.Popen("findstr cmd",  #要执行的指令
                   shell=True,  #第一个参数是否是一个指令,这个默认是False。
                   stdin=p1.stdout, #指定输入管道
                   stdout=subprocess.PIPE,  #指定输出管道
                   stderr=subprocess.PIPE)  #stderr 表示错误管道,当进程执行出错时,可以在错误管道中获取结果。
# 读取p2进程的结果
print(p2.stdout.read())
print(p2.stderr.read().decode("GBK"))  #国内win默认GBK
4、configparser 配置解析文件

作为配置信息的数据,要满足两个条件:

1、数据的值是不固定的

2、可以由用户来指定

读取配置信息分为两步:

1、读取某个配置文件

2、调用get()函数

标准配置文件应为configparser文件夹下的.cfg文件。

一份文件可以有多个section分区,分区之间不能重名。

同一个分区下,option也不能重名。

[mysql]   # 这是分区,中括号内写分区名字,分区名不能重复
username = jack  # 这是一个option(选项)
password = 123   # 所有option左右两端全都会被默认设置成字符串。
lock = true

[django]  #这也是分区
import configparser

# 创建一个配置文件解析器
cfg = configparser.ConfigParser()
# 读取名为test.cfg的配置文件
cfg.read("test.cfg",encoding="UTF-8")
# 获取分区
print(cfg.sections())
输出结果为:
['mysql', 'django']  # 得到列表

# 获取某个分区下的某个选项 第一个参数分区名 第二个选项名称
username = cfg.get("mysql","username")
print(username)
print(type(username))
输出结果:
jack
<class 'str'>


password = cfg.get("mysql","password")
print(password)
print(type(password))
print(int(password))
输出结果为:
123
<class 'str'>
123  # 默认都是字符串,想计算就要先修改数据类型

# 改换布尔值
lock = cfg.getboolean("mysql","lock")
print(type(lock))
print(lock)
输出结果为:
<class 'bool'>
True

# 以下三个函数是帮你封装了 类型转换
cfg.getfloat()  # 转换成浮点数
cfg.getint()   #转换成整数
cfg.getboolean()  #转换成布尔值
5、configparser 增删改操作

作为配置文件 最常用的操作就是读取,很少会做修改 总结: read读取配置文件 add_section 添加分区 set 如果没有这个选项则添加 remove_section 删除分区 remove_option 删除选项

import configparser

# 修改
cfg = configparser.ConfigParser()
cfg.read("test.cfg",encoding="utf-8")
# 将mysql分区下的lock改为True
cfg.set("mysql","lock","true")  # 此处布尔值大小无所谓
with open("test.cfg","wt",encoding="UTF-8") as f:
   cfg.write(f)
   
   
# 添加新的分区
cfg.add_section("新分区")

# 添加新的选项 port 值为3306
cfg.set("mysql","port","3306")
with open("test.cfg","wt",encoding="UTF-8") as f:
   cfg.write(f)
   
   
# 删除
cfg = configparser.ConfigParser()
cfg.read("test.cfg",encoding="utf-8")
# 删除分区
cfg.remove_section("新分区")
# 删除某个分区的选项
cfg.remove_option("mysql","port")


# 判断是否存在某个分区
print(cfg.has_section("mysql"))  # 返回值为布尔值
# 判断是否存在某个选项
print(cfg.has_option("mysql","username"))  # 返回值为布尔值
6、shutil 增删改操作

该模块提供比os模块更加丰富的文件操作功能,如压缩、解压缩、获取文件信息等。

    shutil.copyfileobj   拷贝文件 提供两个文件对象 长度表示缓冲区大小
   shutil.copyfile(src, dst) 拷贝文件 提供两个文件路径
   shutil.copymode()  拷贝文件权限 提供两个文件路径
   shutil.copystat(src, dst) 拷贝文件状态信息 最后访问 最后修改 权限 提供两个文件路径
   shutil.copy(src, dst) 拷贝文件和权限   提供两个文件路径
   shutil.copy2(src, dst) 拷贝文件和状态信息 提供两个文件路径
   
   
   shutil.ignore_patterns("mp3","*.py") #名字是mp3或者后缀名为.py的就不复制
   shutil.copytree(src, dst, symlinks=False, ignore=None)  # 拷贝目录(两句联合使用)
   
   
   
   symlinks默认False将软连接拷贝为硬链接  否则拷贝为软连接
   shutil.rmtree 删除目录 可以设置忽略文件
   shutil.move(src, dst)   移动目录和文件

压缩与解压缩:

import shutil
# 压缩文件只支持zip和tar

#压缩, 文件名 格式 需要压缩的文件所在文件夹
shutil.make_archive("压缩测试","zip",r"/Users/jerry/PycharmProjects/备课/常用模块五期")   #压缩后的文件放置在与被压缩文件相同的文件夹中

#解压缩 #压缩, 文件名 解压后的文件存放目录
shutil.unpack_archive("压缩测试.zip",  #解压文件名
                     r"/Users/jerry/PycharmProjects/备课/常用模块五期",
                    r"zip")

20181210(os,os.path,subprocess,configparser,shutil)的更多相关文章

  1. Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)

    Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix) 深度优先搜索的解题详细介绍,点击 给定一个整数矩 ...

  2. HDU - 4725 (The Shortest Path in Nya Graph)层次网络

    题意:有n个点,每个点都在一个层内,层与层之间的距离为c,一个层内的点可以到达与它相邻的前后两个层的点,还有m条小路 ..时间真的是卡的很恶心啊... 借一下别人的思路思路: 这题主要难在建图上,要将 ...

  3. VueJs(12)---vue-router(导航守卫,路由元信息)

    vue-router(导航守卫,路由元信息) 之前泄露两篇有关vue-router博客: VueJs(10)---vue-router(进阶1) VueJs(11)---vue-router(进阶2) ...

  4. .lib .dll 区别介绍、使用(dll的两种引入方式)

    .lib .dll文件都是程序可直接引用的文件,前者就是所谓的库文件,后者是动态链接库(Dynamic Link Library)也是一个库文件.而.pdb则可以理解为符号表文件.DLL(Dynami ...

  5. os模块、os.path模块、shutil模块、configparser模块、subprocess模块

    一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd()  获取当前文件所在的文件夹路径 os.chdir()  ...

  6. Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)

    一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...

  7. 模块简介:(random)(xml,json,pickle,shelve)(time,datetime)(os,sys)(shutil)(pyYamal,configparser)(hashlib)

    Random模块: #!/usr/bin/env python #_*_encoding: utf-8_*_ import random print (random.random()) #0.6445 ...

  8. day16-Python运维开发基础(os / os.path / shutil模块)

    1. OS模块与shutil模块 os :新建/删除shutil: 复制/移动 # ### os模块 与 shutil模块 """ os 新建/删除 shutil 复制/ ...

  9. PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器

    1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...

随机推荐

  1. codechef FIBTREE 码农题 线段树 树剖 标记永久化

    好烦啊,调了半天 线段树部分标记比较多,手抖打错了一个 剩下的都是取模的问题 我自己瞎jb推的公式里保留了abs,但是在模意义下是gg的,所以必须把正负区分开 调试的时候一定要注意构造各种形状的树,不 ...

  2. hdu5709Claris Loves Painting主席树 奇妙的DFS序

    先不考虑层数限制 一棵树上每个点有个颜色,问一棵子树的颜色数 感觉简单多了是吧 考虑每个点的贡献:自己到根的路径上的一个包含自己的连续段 观察最顶端的点的父亲: 它满足有了额外的同色孩子(咦) 这一条 ...

  3. @Column 注解详情

    @Column标记表示所持久化属性所映射表中的字段,该注释的属性定义如下: @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface ...

  4. D. Statistics of Recompressing Videos

    D. Statistics of Recompressing Videos time limit per test 3 seconds memory limit per test 256 megaby ...

  5. Java输入输出流简单案例

    package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...

  6. paas相关,添加ing

    1. docker 构建镜像,docker build -t image_name:version dockerfilePath.使用镜像启动一个docker容器,docker run --name ...

  7. 移动端之js控制rem,适配字体

    方法一:设置fontsize 按照iphone 5的适配  1em=10px    适配320 // “()()”表示自执行函数 (function (doc, win) { var docEl = ...

  8. JAVA变量介绍

    1.变量: 变量是内存中存储数据的小盒子(小容器),用来存数据和取数据: 2.计算机存储设备的最小信息单元叫位(bit   b); 计算机最小的存储单元叫字节(byte B);   存储单位有(bit ...

  9. Java基本语法和变量

    1基本语法 1.1 标识符.关键字 在程序中用于定义名称的都为标识符,如文件名称.类名称.方法名称或变量名称等. 在Java中标识符的定义格式由字母.数字._(下划线),$所组成,不能以数字开头, 不 ...

  10. springboot+shiro+cas实现单点登录之cas server搭建

    CAS是YALE大学发起的一个开源项目,旨在为web应用系统提供一种可靠的单点登录方法.它主要分为client和server端,server端负责对用户的认证工作,client端负责处理对客户端受保护 ...