Day 18
1.os模块(对系统进行操作)
import os
# system() 在python中执行系统命令
os.system('ifconfig')
os.system('touch 1.txt')
os.system('rm-rf 1.txt')
os.system('ipconfig')
# popen() 执行系统命令返回对象,通过read方法读出字符串(防止字符串乱码,使用popen进行操作)
obj=os.popen('ifconfig')#显示的时候,按照utf-8进行转换,默认windows是gbk的编码集
res=obj.read()
print(res)
# listdir() 获取指定文件夹中的所有内容的名称列表
lst=os.listdir('.') # . 当前目录
lst=os.listdir('..')# ..上一级目录
lst=os.listdir('/home/wangwen/')
print(res)
# getcwd() 获取当前文件所在的默认路径(单纯的路径)
res=os.getcwd()
print(res) #/mnt/hgfs/python31_gx/day19
# 路径 + 文件
print(__file__)#/mnt/hgfs/python31_gx/day19/1.py
# chdir() 修改当前文件工作的默认路径
os.chdir('/home/wangwen/mywork')
#os.system('mkdir ceshi100')
os.system('rm-rf ceshi100')
#environ 获取或修改环境变量
print(os.environ)
### 通过系统的环境变量path,自动找该命令的路径
'''
[window]
1.右键qq,看一眼当前qq所在的路径,把路劲复制一下
2.右键我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 编辑Path环境变量 ->新建添加一下即可
3.打开cmd ->QQScLauncher.exe ->通过命令调用qq
[linux]
1.在/home/wangwen -> mkdir mywork -> touch wangwen
2.nano wangwen -> ifconfig
3.chmod 777 wangwen -> ./wangwen -> 产生效果
4.把wangwen所在的路径添加到linux的环境变量path当中(系统可以自动找wangwen命令的路径)
5.os.environ["PATH"] += ":/home/wangwen/mywork"
6.os.system("wangwen")
# /home/wangwen/mywork
'''
print(os.environ['PATH'])
os.environ['PATH']+= ':/home/wangwen/mywork'
os.system('wangwen')
# os 模块属性
# name 获取系统标识 linux,mac -> posix windows -> nt
print(os.name)
# sep 获取路径分割符号 linux,mac -> / windows -> \
print(os.sep)
# linesep 获取系统的换行符号 linux,mac -> \n windows -> \r\n或\n
print(repr(os.linesep))
# os.mknod 创建文件
os.mknod('1.txt')
# os.remove 删除文件
os.remove('1.txt')
# os.mkdir 创建目录(文件夹)
os.mkdir('ceshi100')
# os.rmdir 删除目录
os.rmdir('ceshi100')
# os.rename 对文件,目录重命名
os.rename('111.txt','123.py')
# os.makedirs 递归创建文件夹
os.makedirs('a/c/b/d/e/f/e')
# os.removedirs 递归删除文件夹(空文件夹)
os.removedirs('a/c/b/d/e/f/e')
2.shutil 复制/移动
import shutil
# 单纯的复制文件内容
copyfileobj(fstc,fdst[,length=16*1024]) 复制文件(length的单位是字符(表达一次读多少字符))
fp1=open('123.py',mode='r',encoding='utf-8')
fp2=open('lianxi.php',mode='w',encoding='utf-8')
shutil.copyfileobj(fp1,fp2)
# copyfile(src,dst) 单纯的仅复制文件内容,底层调用了copyfileobj
shutil.copyfile('lianxi1.php','lianxi2.py')
# copymode(src,dst) 单纯的复制文件权限,不包括内容(虚拟机共享目录)
shutil.copymode('123.py','lianxi2.py')
#复制文件内容 + 文件权限
# copy(src,dst) 复制文件权限和内容
shutil.copy('456.py','lianxi3.html')
# copy2(src,dst) 复制文件权限和内容,还包括权限,组,用户,时间等
shutil.copy2('456.py','lianxi4.css')
# 删除/移动(文件和文件夹)
# copytree(src,dst) 拷贝文件夹里的所内容(递归拷贝)
shutil.copytree('lianxi100','lianxi101')
# rmtree(path) 删除当前文件夹及其中所有内容(递归删除)
shutil.rmtree('lianxi101')
# move(path1,path2) 移动文件或者文件夹
shutil.move('lianxi1.php','..')
shutil.move('lianxi100','../lianxi1000') #'移动并改名
3.os.path 路径模块
import os
# basename() 返回文件名部分
strvar='/home/wangwen/mywork/ceshi110.html'
res=os.path.basename(strvar)
print(res)# ceshi110.html
# dirname() 返回路径部分
res=os.path.dirname()
print(res)# /home/wangwen/mywork
# split() 将路径拆分成单独的文件部分和路径部分,组成一个元组
tup=os.path.split(strvar)
print(tup)
# join() 将多个路径和文件组成新的路径,可以自动通过不同的系统加不同的斜杠
path1='cehsi1'
path2='wangwen'
path3='lainxi.py'
pathvar=os.path.join(path1,path2,path3)
print(pathvar)
# splittext() 将路径分割为后缀和其他部分
strvar='/home/wangwen/mywork/ceshi110.html'
res=os.path.splitext(strvar)
print(res)#('/home/wangwen/mywork/ceshi110', '.html')
# getsize() 获取文件的大小
res=os.path.getsize('1.py')
# 文件夹不能计算
res=os.path.getsize('os')
print(res)
# isdir() 检验路径是否是一个文件夹
strvar='/home/wangwen/mywork/wangwen'
res=os.path.isdir(strvar)
print(res)
# isfile() 检测路径是否是一个文件
strvar='/home/wangwen/mywork/wangwen'
res=os.path.isfile(strvar)
print(res)
# islink() 检测路径是否是一个链接
strvar='/home/wangwen/mywork/wangwen'
res=os.path.islink(strvar)
print(res)
os.chdir('/home/wangwen/mywork')
'''stat 文件 查看当前文件的时间属性'''
import time
# getctime() [windos]文件创建时间,[linux]权限的改动时间(返回时间戳)
res=os.path.getctime('123.py')
# getmtime() 获取文件最后一次修改的时间(返回时间戳)
res=os.path.getmtime('123.py')
# getatime() 获取文件最后一次访问时间(返回时间戳)
res=os.path.getatime('123.py')
str_time=time.ctime(res)
print(str_time)
# exists() 检测指定的路径是否存在
strvar='/home/wangwen/mywork/wangwen132312'
res=os.path.exists(strvar)
print(res)
# isabs() 检测一个路径是否是绝对路径
pathvar='.'
res=os.path.isabs(pathvar)
print(res)
# abspath() 将相对路径转化为绝对路径
pathnew=-os.path.abspath(strvar)
print(pathnew)
if not os.path.isabs(pathvar):
pathnew=os.path.abspath(pathvar)
print(pathvar)
4.计算文件夹大小
# 递归计算文件夹大小
def getallsize(pathvar):
size = 0
lst=os.listdir(pathvar)
for i in lst :
pathnew=os.path.join(pathvar,i)
if os.path.isfile(pathnew):
size += os.path.getsize(pathnew)
elif os.path.isdir(pathnew)
size += getallsize(pathnew)
return size
res=getallsize(pathvar)
print(res)
5.tarfile 压缩模块 .tar .tar.gz .tar.bz2
import tarfile
#1.创建tar包
'''最小的压缩包'''
# 单纯的tar的包
tf=tarfile.open('ceshi0729_1.tar','w',encoding='utf-8')
tf.add('/bin/echo','echo')
tf.add('/bin/ed','/tem/ed')
tf.close()
# .tar.gz
tf=tarfile.open('ceshi0729_2.tar.gz','w:gz',encoding='utf-8')
tf.add('/bin/echo','echo')
tf.add('/bin/ed','/tem/ed')
tf.close()
# .tar.bz2
tf=tarfile.open('ceshi0729_3.tar.bz2','w:bz2',encoding='utf-8')
tf.add('/bin/echo','echo')
tf.add('/bin/ed','/tem/ed')
tf.close()
# 2.对压缩包进行解压
tf=tarfile.open('cehsi0729_3.tar.bz2','r',encoding='utf-8')
# 解压单个
tf.extract('echo','ceshi0729_4')
# 解压所有
tf.extractall('ceshi07259_3')
tf.close()
# 3. 追加文件(支持with语法)[只能为没有压缩过的tar包进行追加]
with tarfile.open('cehsi0729_1.tar','a',encoding='utf-8') as tf :
tf.add('/bin/cp','cp')
# 4.查看压缩包中的文件
with tarfile.open('ceshi0729_2.tar.gz','r',encoding='utf-8') as tf:
lst=tf.getnames()
print(lst)
6.如何处理tarfile不能再已经压缩过的保重追加内容的问题
# ceshi0729_3.tar.bz2
import os
path = os.getcwd()
pathvar1=os.path.join(path,'ceshi0729_3.tar.bz2')
# print(pathvar1)
pathvar2=os.path.join(path,'ceshi0729_3')
print(pathvar2)
# (1)先对已经压缩过的包进行解解
with tarfile.open(pathvar1,'r',encoding='utf-8') as tf :
tf.extractall(pathvar2)
# (2)往这个解压的文件夹中添加新的文件
mybin='cp -a /bin/fgrep' + pathvar2
os.system(mybin)
# (3) 对这个文件进行过滤筛选,重新打包压缩(不要echo)
lst=os.listdir(pathvar2)
with tarfile.open(pathvar1,'w:bz2',encoding='utf-8') as tf :
for i in lst:
if i != 'echo':
pathnew=os.path.join(pathvar2,i)
tf.add(pathnew,i)