OS模块

import os

'''
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
In [23]: os.stat('路飞作业')
Out[23]: stat_result(st_mode=16893, st_ino=933171L, st_dev=43, st_nlink=3,
st_uid=1000, st_gid=1000, st_size=4096L,
st_atime=1523518431, st_mtime=1523517556, st_ctime=1523517556) os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.popen("bash command).read() 运行shell命令,获取执行结果 In [14]: os.popen('df -h').read()
Out[14]: 'Filesystem Size Used Avail Use% Mounted on\nudev 482M 0 482M 0% /dev\ntmpfs 100M 3.3M 97M 4% /run\n/dev/sda1 19G 3.8G 14G 22% /\ntmpfs 500M 4.0K 500M 1% /dev/shm\ntmpfs 5.0M 0 5.0M 0% /run/lock\ntmpfs 500M 0 500M 0% /sys/fs/cgroup\ntmpfs 100M 0 100M 0% /run/user/1000\n/home/pyvip/.Private 19G 3.8G 14G 22% /home/pyvip\n' os.environ 获取系统环境变量
os.kill(10884,signal.SIGKILL)杀死进程: os.path
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
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
'''
#
dir = r'/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块'
# 获取文件夹大小
count = 0
if (os.path.isdir(dir)): #判断是否为目录
for r, ds, files in os.walk(dir): #遍历目录下所有文件根,目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名称】
for file in files: #遍历所有文件
print(os.path.join(r, file),os.path.getsize(os.path.join(r, file)))
size = os.path.getsize(os.path.join(r, file)) #获取文件大小
count += size
print(count)
if count > 1024 * 1024:
print('%.4f M'% (count/ 1024.0 / 1024.0))
elif count > 1024:
print('%.4f K' % (count/ 1024.0)) """
输出
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler2.py 490
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/__init__.py 55
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler.py 418
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xmlbuild.py 571
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/build_out.xml 243
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml test 831
/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/output.xml 595
3203
3.1279 K """
# 删除文件夹下所有文件
import os, sys
dirPath = "test/"
print ('移除前test目录下有文件:%s' %os.listdir(dirPath))
#判断文件是否存在
if(os.path.exists(dirPath+"foo.txt")):
os.remove(dirPath+"foo.txt")
print ('移除后test 目录下有文件:%s' %os.listdir(dirPath))
else:
print ("要删除的文件不存在!")

注意:os.stat('path\filename') 获取文件\目录信息的结构说明

stat 结构:

st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

sys模块

sys模块是与python解释器交互的一个接口。

import sys
print(sys.argv) #实现从程序外部向程序传递参数。(在命令行里面输打开路径执行)
name=sys.argv[1] #命令行参数List,第一个元素是程序的本身路径
password = sys.argv[2]
if name=='yy' and password == '':
print('继续执行程序')
else:
exit() sys.exit()#退出程序,正常退出时exit(0)
print(sys.version)#获取python解释的版本信息
print(sys.maxsize)#最大能表示的数,与系统多少位有关
print(sys.path)#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
print(sys.platform)#返回操作系统平台名称 sys.getrecursionlimit() #获取最大递归层数
sys.setrecursionlimit(1200) #设置最大递归层数
sys.getdefaultencoding() #获取解释器默认编码
sys.getfilesystemencoding #获取内存数据存到文件里的默认编码

shutil 模块

常用方法

高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中

#先来看看其源代码。
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf) #注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作
import shutil
f1=open('name','r')
f2=open('name_copy','w+')
shutil.copyfileobj(f1,f2,length=16*1024)

shutil.copyfile(src, dst)
拷贝文件copyfile调用了copyfileobj

shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在
#一句就可以实现复制文件内容

shutil.copymode(src, dst)
仅copy权限,不更改文件内容,组和用户。

shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

shutil.copy(src, dst)
复制文件的内容以及权限,先copyfile后copymode

import shutil
shutil.copy('f1.log', 'f2.log')

shutil.copystat(src,dst)

#复制所有的状态信息,包括权限,组,用户,时间等

import shutil
shutil.copystat('f1.log', 'f2.log')

shutil.copy2(src,dst)

#复制文件的内容以及文件的所有状态信息。先copyfile后copystat

import shutil
shutil.copy2('f1.log', 'f2.log')

shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)

#递归的复制文件内容及状态信息

[root@ python_test]# tree copytree_test/
copytree_test/
└── test
├── test1
├── test2
└── hahaha [root@ test]# ls -l
total 0
-rw-r--r--. 1 python python 0 May 14 19:36 hahaha
-rw-r--r--. 1 python python 0 May 14 19:36 test1
-rw-r--r--. 1 root root 0 May 14 19:36 test2 >>> shutil.copytree('copytree_test','copytree_copy')
'copytree_copy' [root@ python_test]# ls -l
total 12
drwxr-xr-x. 3 root root 4096 May 14 19:36 copytree_copy
drwxr-xr-x. 3 root root 4096 May 14 19:36 copytree_test
-rw-r--r--. 1 python python 79 May 14 05:17 test1
-rw-r--r--. 1 root root 0 May 14 19:10 test2
[root@ python_test]# tree copytree_copy/
copytree_copy/
└── test
├── hahaha
├── test1
└── test2

shutil.rmtree(path, ignore_errors=False, onerror=None)

#递归地删除文件

import shutil
shutil.rmtree('folder1')

shutil.move(src, dst)

#递归的移动文件,它类似mv命令,其实就是重命名。

import shutil
shutil.move('folder1', 'folder3')

make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)

#压缩打包

base_name:    压缩打包后的文件名或者路径名

format:          压缩或者打包格式    "zip", "tar", "bztar"or "gztar"

root_dir :         将哪个目录或者文件打包(也就是源文件)

owner: 用户,默认当前用户

group: 组,默认当前组

logger: 用于记录日志,通常是logging.Logger对象

>>> shutil.make_archive('tarball','gztar',root_dir='copytree_test')

[root@ python_test]# ls -l
total 12
drwxr-xr-x. 3 root root 4096 May 14 19:36 copytree_copy
drwxr-xr-x. 3 root root 4096 May 14 19:36 copytree_test
-rw-r--r--. 1 root root 0 May 14 21:12 tarball.tar.gz
-rw-r--r--. 1 python python 79 May 14 05:17 test1
-rw-r--r--. 1 root root 0 May 14 19:10 test2 #将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data') #将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

zipfile压缩&解压缩

压缩

* zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]])

* mode 和文件操作一样,'r'表示只打开一个存在的只读ZIP文件;'w'表示清空并打开一个只写的ZIP文件,或者创建只写一个ZIP文件;'a'表示打开一个ZIP文件,并添加内容。

compression表示压缩格式,可选的格式只有两种:ZIP_STORE;ZIP_DEFLATED。ZIP_STORE是默认的,表示不压缩;ZIP_DEFLATED表示压缩。allowZip64为True时,表示支持64位的压缩。

import zipfile

with zipfile.ZipFile('test.zip', mode='w',compression=zipfile.ZIP_DEFLATED) as zipf:
zipf.write('/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler2.py')
zipf.write('/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler.py') zipf = zipfile.ZipFile('test.zip')
print(zipf.namelist())

解压

f.extract(directory)和f.exractall(directory)

import zipfile

zipf = zipfile.ZipFile('test.zip')

zipf.extractall('channel1')#将所有文件解压到channel1目录下

高级应用 
1 zipfile.is_zipfile(filename) 
判断一个文件是不是压缩文件 
2 ZipFile.namelist() 
返回文件列表 
3 ZipFile.open(name[, mode[, password]]) 
打开压缩文档中的某个文件

if zipfile.is_zipfile('test.zip'): #is_zipfile() 判断是否似zip文件
f = zipfile.ZipFile('test.zip')
files = f.namelist() #namelist() 返回zip压缩包中的所有文件
print ('files:', files)
mess = f.open('home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler2.py') #打开zip压缩包中的某个文件,可读可写
print ('mess:', mess.read())
f.close()

tarfile压缩&解压缩

import tarfile

# 压缩
>>> t=tarfile.open('/tmp/egon.tar','w')
>>> t.add('/test1/a.py',arcname='a.bak')
>>> t.add('/test1/b.py',arcname='b.bak')
>>> t.close() # 解压
>>> t=tarfile.open('/tmp/egon.tar','r')
>>> t.extractall('/egon')
>>> t.close()

Python常用模块os & sys & shutil模块的更多相关文章

  1. Python模块 - os , sys.shutil

    os 模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ...

  2. Day14 Python基础之os/sys/hashlib模块(十二)

    os模块 os.getcwd()  #获取当前工作路径 os.chdir(‘dirname1/dirname2/dirname3’) #改变当前脚本的工作路径,相当于cmd下的cd os.makedi ...

  3. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  4. Python中os和shutil模块实用方法集锦

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

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

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

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

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

  7. 模块、包及常用模块(time/random/os/sys/shutil)

    一.模块 模块的本质就是一个.py 文件. 导入和调用模块: import module from module import xx from module.xx.xx import xx as re ...

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

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

  9. python模块之os sys shutil

    os模块 os模块是与操作系统交互的一个接口 #当前执行这个python文件的工作目录相关的工作路径 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir( ...

随机推荐

  1. GitLab代码行数统计--统计增加与删除行数

    #!/bin/bashmaster_dev='master'date_star='2018-11-01'date_end='2018-11-30'path1=`find /home/gitlab_da ...

  2. HDU-1078.FatMouseandCheese(线性dp + dfs)

    本题大意:在一个n * n的迷宫内进行移动,左上角为初始位置,每次可以走的步数不能超过m,并且每次走的方格上面的数字要大于前一次走的放个数字,不能走到格子外面,问如何能使得到的数字和最大. 本题思路: ...

  3. Django实现支付宝支付

    一 去支付宝申请 - 正式:营业执照 - 测试: 沙箱测试环境    APPID:2016092000554391    买家: esnrce2727@sandbox.com    登录和支付密码: ...

  4. Python开发——变量

    变量的作用 把程序运行的中间结果,临时保存到内存里,以备后面的代码继续调用 变量的声明 name = “yuan” 变量的定义规则 1.变量名只能是  字母.数字或下划线的任意组合 2.变量名的第一个 ...

  5. JVM总括四-类加载过程、双亲委派模型、对象实例化过程

    JVM总括四-类加载过程.双亲委派模型.对象实例化过程 目录:JVM总括:目录 一. 类加载过程 类加载过程就是将.class文件转化为Class对象,类实例化的过程,(User user = new ...

  6. application/json和application/x-www-form-urlencoded使用选择

    一.参考资料 选application/x-www-form-urlencoded还是application/json? @RequestBody应用 二.理解 1.@RequestBody的作用 注 ...

  7. 全渠道java b2b b2c o2o平台

    大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 根据微服务化设计思想,结合spring cloud一 ...

  8. chrome升级后出现滚动条无法滚动

    最近升级chrome最新版本后,导致项目中功能页面的局部滚动条无法滚动(心里暗骂了很久),无论怎么滚动都是最外层的滚动条响应... 1.猜想:尼玛google应该不会干事件流混乱这种事,pass: 2 ...

  9. 第七次spring会议

    昨天我对加密文件进行了解密. 我今天对已完成的代码进行了总体运行,检查运行中出现的bug,在显示便签中出现了过长就无法一次显示完全的情况,没有办法

  10. Java集合:LinkedList源码解析

    Java集合---LinkedList源码解析   一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据re ...