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
  • asp之家 网络编程 m.aspxhome.com