如何使用python复制和提取.gz文件
我刚刚开始学习
python并且有一个问题.
如何创建一个脚本来执行以下操作:(将在bash中写下我是如何做到的) >将< file> .gz从远程server1复制到本地存储.
>然后在本地提取该文件.
>然后将提取文件复制到远程服务器2(用于存档和重复数据删除)
>删除.gz文件的本地副本以释放“临时”存储空间
我需要在循环中运行所有文件. for循环遍历/ dump /文件夹并查找.gz文件. 只是把我的头撞在墙上如何写这个. 解决方法
Python解决方案
虽然shell代码可能更短,但整个过程可以在python中本地完成. python解决方案的关键点是: >使用gzip模块,gzip文件与普通文件一样易于阅读. 这是示例代码: import gzip import glob import os.path source_dir = "/dumps/server1" dest_dir = "/dedupmount" for src_name in glob.glob(os.path.join(source_dir,'*.gz')): base = os.path.basename(src_name) dest_name = os.path.join(dest_dir,base[:-3]) with gzip.open(src_name,'rb') as infile: with open(dest_name,'wb') as outfile: for line in infile: outfile.write(line) 此代码从remote1服务器读取并写入remote2服务器.除非您需要,否则不需要本地副本. 在此代码中,所有解压缩都由本地计算机上的CPU完成. Shell代码 为了比较,这里是等效的shell代码: for src in /dumps/server1/*.gz do base=${src##*/} dest="/dedupmount/${base%.gz}" zcat "$src" >"$dest" done 三步Python代码 这种稍微复杂的方法实现了OP的三步算法,它使用本地机器上的临时文件: import gzip import glob import os.path import shutil source_dir = "./dumps/server1" dest_dir = "./dedupmount" tmpfile = "/tmp/delete.me" for src_name in glob.glob(os.path.join(source_dir,base[:-3]) shutil.copyfile(src_name,tmpfile) with gzip.open(tmpfile,'wb') as outfile: for line in infile: outfile.write(line) 这会将源文件复制到本地计算机上的临时文件tmpfile,然后将其从那里压缩到目标文件.每次调用此脚本都会覆盖tmpfile. 临时文件可能是安全问题.要避免这种情况,请将临时文件放在只能由运行此脚本的用户编写的目录中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |