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. cocos2dx JS 层(Layer)的生命周期

    场景的生命周期: 一般情况下一个场景只需要一个层,需要创建自己的层类.一些主要的游戏逻辑代码都是写在层中的,场景的生命周期是通过层的生命周期反映出来的,通过重写层的生命周期函数,可以处理场景不同声明周 ...

  2. mysql group_concat用法

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  3. 【网络设备】某防火墙基于IP地址的目的地址转换

    由于来自Internet的对政府,企业的网络攻击日益频繁,因此需要对内网中向外网提供访问服务的关键设备进行有效保护.采用目的地址NAT可以有效地将内部网络地址对外隐藏. 图中:公网中Internet用 ...

  4. java outterLoop跳出多重循环用法以及详解

    List<CommResultMsg> listresult=new ArrayList<CommResultMsg>(); outterLoop :for (int i = ...

  5. spring aop:aspectj-autoproxy 配置

    经常遇到aop-aspectJ的通知不被执行的问题 解决方法:http://blog.csdn.net/qwdafedv/article/details/53005210 首先,确保配置文件都已经是正 ...

  6. Robot framework selenium driver download

    Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads http://npm.taobao.org/mirrors ...

  7. Java多线程-----原子变量和CAS算法

       原子变量      原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题      Java给我们提供了以下几种原子类型: AtomicInteger和Ato ...

  8. 【Redis学习之六】Redis数据类型:集合和有序集合

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 一.集合 Set无序的.去重的元素 ...

  9. HADOOP nutch java mysql

    下载Hadoop安装包 wget  http://apache.fayea.com/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz   java安装 wg ...

  10. webStorm 2018 激活

    原文地址 https://blog.csdn.net/jiangxinyu50/article/details/79104016 webStorm 2018 激活 今天早上一更新webStorm,之前 ...