1.os模块

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

os.getcwd() 获取当前执行文件所在的文件夹路径
os.chdir("dirname") 改变当前脚本工作目录
os.curdir 返回当前目录的字符串表现方式: 结果('.')
os.pardir 获取当前目录的父目录字符串名:结果('..')
os.makedirs('a/b/c') 可生成多层递归目录,如果不存在,可以自动创建中间的目录
os.mkdir('a/b/c') 生成单级目录,会把a,b当成已存在的路径,如果不存在就会报错
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印,\
列表里面只是文件的名称.需要手动拼接其完整路径
os.remove() 删除一个文件
# 如果要删除一个文件夹 而且文件夹不为空 ,思路是 先遍历这个文件夹中的所有文件和文件夹
# 先把里面的内容全部删除 最后再删除文件夹
有一个文件夹a,里面包含了一个a.txt的文件
path=r'E:\python-li\课堂\day19\a'
for f in os.listdir('a'):#得到的f只是字符串类型的文件名
  f_path=path+'\\'+'a.txt'#将其改为文件路径的格式
  print(f_path)
  os.remove(f_path)
os.rmdir('a')

os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/",当你的程序需要跨平台时,路径分隔符不能直接写死要从os中获取
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令(系统命令),直接显示它在执行系统指令时,也可以命令操作系统启动某个程序
os.environ 获取系统环境变量

什么时候使用os 当需要操作文件及文件夹的时候
重点放在对文件的增删改查

2.os.path模块

path翻译为路径
该模块用于处理路径
之所以用这个模块是因为python的跨平台,各平台的路径书写方式不同,所以将所有与路径相关都进行了封装

os.path.abspath(path) 返回path规范化的绝对路径,其实就是把当前文件所在的文件夹与你给的参数进行了拼接
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True 依据:第一个字符是不是路径分割符合,是表示绝对路径
print(os.path.isabs(r'E:\python-li\课堂\day19')) 结果:True
print(os.path.isabs(r'python-li\课堂\day19')) 结果:False
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的文件夹,则返回True。否则返回False
os.path.join(path1,path2) 以当前平台的路径分隔符来进行拼接.如果有多个盘符,取得是最后一个
print(os.path.join('D:\\','a')) 结果:D:\a
print(os.path.join('D:\\','E:\\','a')) 结果:E:\a
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

#返回规范化路径 大写变成小写,反斜杠变成正斜杠
print(os.path.normcase(r'E:\python-li\课堂/day19\os模块.py'))
结果:e:\python-li\课堂\day19\os模块.py

# 规范化路径但大写不变小写 并且 会执行里面..(用于返回上一级目录)
print(os.path.normpath(r'E:\python-li\\课堂//day19\os模块.py\..'))
结果:E:\python-li\课堂\day19
print(os.path.normpath(r'E:\python-li\\课堂\day19\os模块.py\..\..'))
结果:E:\python-li\课堂

#获取项目根目录
import sys,os
sys.path.append(os.path.dirname(os.path.dirname(__file__))

总结:主要处理路径 不会关系路径是否存在 只是做拼接 剪切 转换等等操作
通常是与os一起使用
优点: 用它处理的路径是可以跨平台的

3.subprocess模块

# '''
# subprocess 翻译为子进程
# 进程指的是正在运行的程序
# 子进程 是有另一个正在运行的程序启动的程序 例如:qq聊天 点击了一个连接 打开了浏览器 那么浏览器称之为qq的子进程
# 为什么使用子进程?
# 当我们有一个任务需要处理 而自己的程序无法处理 所以需要开启另一个程序
# 在python中想要获取所有的进程(任务列表)信息
# '''
# import os
# os.system(r"F:\QQ2016\Bin\QQScLauncher.exe")
# os.system('dir')
#它在执行系统指令时,也可以命令操作系统启动某个程序
#os.system在执行时 直接把结果输出到了控制台 如果我们要获取执行的结果就无能为力了
#subprocess不仅可以启动子进程,还能与子进程进行数据交互

import subprocess
#dir 表示要执行命令
#shell 表示dir是一个命令
#stout 指定输出的管道
#管道是什么? 相当于生活中的水管 从一个地方流到另一个地方
#在程序中,数据相当于水 管道的作用,就从一个进程中把数据输到另一个进程
#本质是读写同一个文件
# p = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
# print(p.stdout.read())
#读一次指针到达文件的末尾,再次读就没有数据

#启动一个tasklist子进程,指定输出结果到管道中
p1=subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE)
#启动一个findstr的子程序,将p1进程的结果作为p2进程输入
p2=subprocess.Popen('findstr cmd', #要执行的指令
          shell=True, #第一个参数是否是一个指令
          stdin=p1.stdout, #指定输入管道
          stdout=subprocess.PIPE, #指定输出管道
          stderr=subprocess.PIPE)#表示错误管道,当进程执行出错时,可以在错误管道中获取结果
#读取p2进程的结果
print(p2.stdout.read())
print(p2.stderr.read().decode('GBK'))

#总结:当你需要在python中启动一个子进程,并且它进行数据交互时就是用subprocess
#如果不需要数据交互可以使用 os.system

4.configparser模块

configparser,翻译为配置解析,很显然,它是用来解析配置文件的
何为配置文件?
用于编写程序的配置信息的文件
何为配置信息?
为了提高程序的扩展性,我们会把一些程序中需要用到的值交给用户来确定,比如迅雷的下载目录,同时下载数,qq的提示音等.
作为配置信息的数据,应满足两个条件
1.数据的值不是固定的
2.可以由用户来指定
例如:我们做一个登录功能,为了方便使用我们可以将用户的用户名密码写到配置文件中,可以不需要内次都输入

配置文件编写格式
配置文件中只允许出现两种类型的数据
第一种 section分区 方括号中十分区的名称 例如[ATM]
第二种 option选项 名称=值
注意:
不能出现重复的分区名
同一分区下不能有相同的选项名

在test.cfg中:
#这是一个section(分区)
[mysql]
#这是一个option(选项)
username = henry
password = 123
lock = false
#注意分区名不能重复
#同一个分区下 不能有重复option
[django]

在configparser模块中:
import configparser
#创建一个配置文件解析器
cfg = configparser.ConfigParser()
#读取名为test.cfg的配置文件
cfg.read('test.cfg',encoding='utf-8')
#获取分区
print(cfg.sections())
#获取某个分区下的某个选项,第一个参数分区名 第二个选项名
username=cfg.get('mysql','username')
print(username)
print(type(username))

password=cfg.get('mysql','password')
print(password)
print(type(password))

lock=cfg.getboolean('mysql','lock')
print(type(lock))
print(lock)

#以下三个类型
cfg.getfloat()
cfg.getint()
cfg.getboolean()

#读取配置信息 两步
1.读取某个配置文件
2.调用get函数

configparser的增加修改删除

#修改
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)

#增加
import configparser
cfg=configparser.ConfigParser()
cfg.read('test.cfg',encoding='utf-8')
#增加新分区
cfg.add_section('新分区')
#增加新选项port 值为 3306
cfg.set('mysql','port','3306')
with open('test.cfg','wt',encoding='utf-8') as f:
cfg.write(f)

#删除
import configparser
cfg=configparser.ConfigParser()
cfg.read('test.cfg',encoding='utf-8')
#删除分区
cfg.remove_section('新分区')
#删除某分区的选项
cfg.remove_option('mysql','port')
with open('test.cfg','wt',encoding='utf-8') as f :
cfg.write(f)

#判断是否存在某个分区
print(cfg.has_section('mysql'))
#判断是否存在某个选项
print(cfg.has_option('mysql','username'))

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

5.shutil模块

shutil模块是一个工具包,封装了文件高级操作,让你操作更方便

功能与os有些重叠,os只能帮你处理文件是否存在,路径是否正确等,无法直接完成copy等操作,而shutil提供了压缩与解压缩
import shutil
#copy文件
shutil.copyfile(r'E:\python-li\课堂\day19\os模块.py',\
      r'E:\python-li\课堂\day19\os模块2.py')
#压缩文件 支持的格式zip 和tar
shutil.make_archive('day19','zip',r'E:\python-li\课堂')
shutil.make_archive('os.path','tar',r'E:\python-li\课堂\day19')
#解压缩
shutil.unpack_archive(r'E:\python-li\课堂\day19\day19.zip',
          r'E:\python-li\课堂\day19\day19\解压的文件夹.zip'
          r'zip')
总结:拷贝文件,压缩解压缩文件
make_archive 中的第四个参数 base_dir 也是用来指定要压缩的路径,与root_dir的区别
#root_dir 仅仅压缩指定的路径下的内容
#base_dir 会将指定的路径下的内容 与其完整的文件层级一并压缩
#当指定base_dir时root_dir不生效

os模块,os.path模块,subprocess模块,configparser模块,shutil模块的更多相关文章

  1. 常用模块:hashlib,subprocess,configparser。

    一  hashlib模块 那么我们前面学习数据类型的时候,也讲了hash,可变类型不可hash:不可变类型可hash. 我们知道hash是一种算法,接收传入的内容经过运算之后得到一个hash值,我们可 ...

  2. 17 - 路径操作-shutil模块

    目录 1 路径操作 1.1 os.path模块 1.2 pathlib模块 1.2.1 目录操作 1.2.2 文件操作 1.3 os 模块 2 shutil模块 2.1 copy复制 2.2 rm删除 ...

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

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

  4. python 关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)

    一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname&quo ...

  5. python学习 day19 configparser模块 os模块 subprocess模块

    上周五回顾 logging 用于记录日志 四种核心角色: 生成器Logger 过滤器Filter 处理器Handler 格式化处理器 Formatter logging.info.debug 使用默认 ...

  6. Python time、datetime、os、random、sys、hashlib、json、shutil、logging、paramiko、subprocess、ConfigParser、xml、shelve模块的使用

    文章目录: 1. time & datetime模块 2. os模块 3. random模块 4. sys模块 5. hashlib模块 6. json模块 7. shutil模块 8. lo ...

  7. python关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)

    一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 功能 说明 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirna ...

  8. day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime

    os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...

  9. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

随机推荐

  1. CG标准函数库

    (1)数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回tu ...

  2. java中的锁之Lock接口与Condition接口

    一.Lock源码. 1.是一个接口.一共有6个方法. 2.方法详细如下: (1)当前线程尝试获取锁.结果分两种情况,一是成功获取到锁,则返回:二是获取锁失败,则一直等待.不响应中断请求. (2)当前线 ...

  3. 20180309 - C# demo - 1

    using System; namespace HelloWorldApplication { class HelloWorld { static void Main(string[] args) { ...

  4. RRDtool 安装和使用

    一.RRDtool 的功能及使用介绍 定义:RRDtool(Round Robin Database Tool)是一个用来处理定量数据的开源高性能数据库. 1.RRDtool 的特性 由于 RRDto ...

  5. Sitecore CMS中创建模板

    如何在Sitecore CMS中创建模板. 在/sitecore/templates选择应创建模板的文件夹中. 注意:在多站点项目中,通常会在模板所属的网站名称的/sitecore/templates ...

  6. GCD(Swift)

    1.取消过去的接口 说起 GCD, 大家肯定回想起类似 dispatch_async 这样的语法. GCD 的这个语法模式无论是和 Objc 还是 Swift 的整体风格都不太打掉. 所以 Swift ...

  7. for-each 循环原理

    for-each 循环原理1,for-each 是在java5 之后出现的.for是java 上的一个关键字,在jdk 找不到任何for的底层实现的.是因为for的底层实现被封装到了编译器中.所以通过 ...

  8. python selenium设置chrome的下载路径

    python可以通过ChromeOptions设置chrome参数,如下载路径等,代码如下(python 3.6.7): #-*-coding=utf-8-*- from selenium impor ...

  9. WebSocket和long poll、ajax轮询的区别,ws协议测试

    WebSocket和long poll.ajax轮询的区别,ws协议测试 WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连 ...

  10. MySQL 0Day漏洞出现 该漏洞可以拿到本地Root权限

    2016年9月12日, legalhackers.com网站发布了编号为CVE-2016-6662的0day漏洞公告 .由于该漏洞可以获得MySQL服务器的Root权限,且影响MySql5.5.5.6 ...