加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用python复制和提取.gz文件

发布时间:2020-12-20 12:31:34 所属栏目:Python 来源:网络整理
导读:我刚刚开始学习 python并且有一个问题. 如何创建一个脚本来执行以下操作:(将在bash中写下我是如何做到的) 将 file .gz从远程server1复制到本地存储. cp /dumps/server1/file1.gz /local/ 然后在本地提取该文件. gunzip /local/file1.gz 然后将提取文件复制到
我刚刚开始学习 python并且有一个问题.

如何创建一个脚本来执行以下操作:(将在bash中写下我是如何做到的)

>将< file> .gz从远程server1复制到本地存储.

cp /dumps/server1/file1.gz /local/

>然后在本地提取该文件.

gunzip /local/file1.gz

>然后将提取文件复制到远程服务器2(用于存档和重复数据删除)

cp /local/file1.dump /dedupmount

>删除.gz文件的本地副本以释放“临时”存储空间

rm -rf /local/file1.gz

我需要在循环中运行所有文件.
所有文件和目录都安装在同一台服务器上.

for循环遍历/ dump /文件夹并查找.gz文件.
每个.gz文件将首先复制到/ local目录,然后在那里提取.
解压缩后,解压缩的.dmp文件将被复制到/ dedupmount文件夹以进行存档.

只是把我的头撞在墙上如何写这个.

解决方法

Python解决方案

虽然shell代码可能更短,但整个过程可以在python中本地完成. python解决方案的关键点是:

>使用gzip模块,gzip文件与普通文件一样易于阅读.
>要获取源文件列表,请使用glob模块.它以shell glob功能为模型.
>要操作路径,请使用python os.path模块.它为文件系统提供与OS无关的接口.

这是示例代码:

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.

临时文件可能是安全问题.要避免这种情况,请将临时文件放在只能由运行此脚本的用户编写的目录中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读