Python使用shutil操作文件、subprocess运行子程序
作者:springsnow 时间:2021-03-01 00:19:19
一、shutil模块(了解):高级的文件、文件夹、压缩包处理模块。
import shutil
# shutil.copyfileobj(fsrc, fdst[, length]),将文件内容拷贝到另一个文件中
shutil.copyfileobj(open('old.xml', 'r'), open('new.xml', 'w'))
# shutil.copyfile(src, dst),拷贝文件
shutil.copyfile('f1.log', 'f2.log') # 目标文件无需存在
# shutil.copymode(src, dst),仅拷贝权限。内容、组、用户均不变
shutil.copymode('f1.log', 'f2.log') # 目标文件必须存在
# shutil.copystat(src, dst),仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copystat('f1.log', 'f2.log') # 目标文件必须存在
# shutil.copy(src, dst),拷贝文件和权限
shutil.copy('f1.log', 'f2.log')
# shutil.copy2(src, dst),拷贝文件和状态信息
shutil.copy2('f1.log', 'f2.log')
# shutil.ignore_patterns(*patterns)
# shutil.copytree(src, dst, symlinks=False, ignore=None),递归的去拷贝文件夹
# 目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
# shutil.rmtree(path[, ignore_errors[, onerror]]),递归的去删除文件
shutil.rmtree('folder1')
# shutil.move(src, dst),递归的去移动文件,它类似mv命令,其实就是重命名
shutil.move('folder1', 'folder3')
# shutil.make_archive(base_name, format, ...),创建压缩包并返回文件路径,例如:zip、tar
'''
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,如 data_bak = >保存至当前路径;/ tmp/data_bak = >保存至/tmp/
format:压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:要压缩的文件夹路径(默认当前目录)
owner:用户,默认当前用户
group:组,默认当前组
logger:用于记录日志,通常是logging.Logger对象
'''
# 将 /data 下的文件打包放置当前程序目录
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
# 将 /data下的文件打包放置 /tmp/目录
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
1、 zipfile压缩解压缩
import zipfile
# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()
2、 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()
二、subprocess模块(了解):运行子程序
subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。
更多查看官网:https://docs.python.org/2/library/subprocess.html?highlight=subprocess#frequently-used-arguments
import subprocess
'''
sh-3.2# ls /Users/nick/Desktop |grep txt$
mysql.txt
tt.txt
事物.txt
'''
res1 = subprocess.Popen('ls /Users/jieli/Desktop',shell=True, stdout=subprocess.PIPE)
res = subprocess.Popen('grep txt$', shell=True,stdin=res1.stdout, stdout=subprocess.PIPE)
print(res.stdout.read().decode('utf-8'))
# 下面这段等同于上面,但是上面的优势在于,一个数据流可以和另外一个数据流交互,可以通过爬虫得到结果然后交给grep。
res1 = subprocess.Popen('ls /Users/jieli/Desktop |grep txt$',shell=True, stdout=subprocess.PIPE)
print(res1.stdout.read().decode('utf-8'))
# windows下:
# dir | findstr 'test*'
# dir | findstr 'txt$'
res1 = subprocess.Popen(r'dir “C:\Users\Administrator\PycharmProjects\test\函数备课”', shell=True, stdout=subprocess.PIPE)
res = subprocess.Popen('findstr test*', shell=True, stdin=res1.stdout, stdout=subprocess.PIPE)
# subprocess使用当前系统默认编码,得到结果为bytes类型,在windows下需要用gbk解码
print(res.stdout.read().decode('gbk') )
来源:https://www.cnblogs.com/springsnow/p/11974749.html
标签:Python,shutil,操作,文件,subprocess,运行,子程序
0
投稿
猜你喜欢
python实现textrank关键词提取
2021-11-01 16:47:58
跟老齐学Python之关于循环的小伎俩
2022-07-20 07:03:36
ASP申请单动态添加实现方法及代码
2008-11-04 11:09:00
Python 中获取数组的子数组示例详解
2022-11-04 19:26:26
详解CSS3中的属性选择符
2008-04-24 14:30:00
CI操作cookie的方法分析(基于helper类库)
2023-11-20 21:59:07
关于ASP生成伪参数加密技巧
2008-07-16 12:05:00
matplotlib之Font family [‘sans-serif‘] not found的问题解决
2021-03-31 09:55:42
详解Django中的ifequal和ifnotequal标签使用
2023-06-24 05:07:04
微信小程序开发工具介绍
2023-08-10 23:05:40
js友好的表单验证程序vform
2007-08-16 13:32:00
ServerXMLHTTP的超时设置(setTimeouts)参数含义
2009-02-12 12:51:00
sqlserver 脚本和批处理指令小结
2012-05-22 18:56:55
javascript调试之DOM断点调试法使用技巧分享
2023-09-24 12:24:18
Python 使用requests模块发送GET和POST请求的实现代码
2023-07-19 23:19:27
如何使用Iframe实现本页提交?
2010-06-05 12:36:00
JavaScript创建可维护幻灯片效果
2008-06-21 16:42:00
Python通过两个dataframe用for循环求笛卡尔积
2023-11-02 04:32:24
Python实现的计算器功能示例
2023-02-16 22:25:30
优化你的ASP程序及优化网页
2007-10-06 23:02:00