Python之tarfile模块的使用

1、判断是否是tar文件的示例

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

filename_list = [‘REME.txt‘, ‘example.bz2‘, ‘tarDir.tar‘, ‘content.txt‘]
for filename in filename_list:
    try:
        print(‘{:>15} {}‘.format(filename, tarfile.is_tarfile(filename)))
    except IOError as err:
        print(‘{:>15} {}‘.format(filename, err))

tarfile_is_tarfile.py

 运行效果

[[email protected] mnt]# python3 tarfile_is_tarfile.py
       REME.txt [Errno 2] No such file or directory: ‘REME.txt‘
    example.bz2 False
     tarDir.tar True
    content.txt False

 2、获取tar文件里面所有的文件名

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

with tarfile.open(‘tarDir.tar‘, ‘r‘) as t:
    print(t.getnames())

tarfile_getnames.py

 运行效果

[[email protected] mnt]# python3 tarfile_getnames.py
[‘content.txt‘, ‘example.bz2‘, ‘tarDir‘, ‘tarDir/lines.bz2‘]

 3、获取tar文件里面所有的文件名、大小、模式等

#!/usr/bin/env python3
# encoding: utf-8

import tarfile
import time

with tarfile.open(‘tarDir.tar‘, ‘r‘) as t:
    for member_info in t.getmembers():
        print(member_info.name)
        print(‘ 修改时间:‘, time.ctime(member_info.mtime))
        print(‘ 模式:‘, member_info.mode)
        print(‘ 类型:‘, member_info.type)
        print(‘ 大小:‘, member_info.size, ‘bytes‘)

tarfile_getmembers.py

运行效果

[[email protected] mnt]# python3 tarfile_getmembers.py
content.txt
 修改时间: Wed Dec 25 14:16:23 2019
 模式: 420
 类型: b‘0‘
 大小: 336 bytes
example.bz2
 修改时间: Mon Jan  6 00:06:31 2020
 模式: 420
 类型: b‘0‘
 大小: 65 bytes
tarDir
 修改时间: Thu Jan  9 10:29:51 2020
 模式: 493
 类型: b‘5‘
 大小: 0 bytes
tarDir/lines.bz2
 修改时间: Sun Jan  5 23:43:05 2020
 模式: 420
 类型: b‘0‘
 大小: 88 bytes

 4、获取tar文件里面所有的文件名、大小、模式等,当文件不存在的时候,异常处理的机制示例

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

with tarfile.open(‘tarDir.tar‘, ‘r‘) as t:
    for filename in [‘example.bz2‘, ‘test‘]:
        try:
            info = t.getmember(filename)
        except KeyError:
            print(‘{} 文件不存在‘.format(filename))
        else:
            print(‘文件名:{} 大小:{} bytes‘.format(info.name, info.size))

tarfile_getmember.py

运行效果

[[email protected] mnt]# python3 tarfile_getmember.py
文件名:example.bz2 大小:65 bytes
test 文件不存在

 5、读取tar里面的文件数据内容

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

with tarfile.open(‘tarDir.tar‘, ‘r‘) as t:
    for filename in [‘example.bz2‘, ‘test‘]:
        try:
            f = t.extractfile(filename)
        except KeyError:
            print(‘{} 文件不存在,无法归档‘.format(filename))
        else:
            print(‘文件名:{} 读到的内容:{}‘.format(filename, f.read().decode(‘utf-8‘)))

tarfile_extractfile.py

运行效果

[[email protected] mnt]# python3 tarfile_getmember.py
文件名:content.txt 读到的内容:b‘Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec\negestas, enim et consectetuer ullamcorper, lectus ligula rutrum leo, a\nelementum elit tortor eu quam. Duis tincidunt nisi ut ante. Nulla\nfacilisi. Sed tristique eros eu libero. Pellentesque vel arcu. Vivamus\npurus orci, iaculis ac, suscipit sit amet, pulvinar eu,\nlacus.\n\n‘
test 文件不存在,无法归档

6、tart简单解压示例

#!/usr/bin/env python3
# encoding: utf-8

import os
import tarfile

dir_name = ‘outdir‘
os.mkdir(dir_name)
with tarfile.open(‘tarDir.tar‘, ‘r‘) as f:
    f.extract(‘content.txt‘, dir_name)
print(os.listdir(dir_name))

tarfile_extract.py

运行效果

[[email protected] mnt]# python3 tarfile_extract.py
[‘content.txt‘]

[[email protected] mnt]# ll outdir/
-rw-r--r-- 1 root root 336 Dec 25 14:16 content.txt

7、tar解压示例(推荐)

#!/usr/bin/env python3
# encoding: utf-8

import os
import tarfile

dir_name = ‘outdir‘
os.mkdir(dir_name)
with tarfile.open(‘tarDir.tar‘, ‘r‘) as f:
    f.extractall(dir_name)
print(os.listdir(dir_name))

tarfile_extractall.py

运行效果

[[email protected] mnt]# python3 tarfile_extractall.py
[‘content.txt‘, ‘example.bz2‘]

[[email protected] mnt]# ll outdir/
total 8
-rw-r--r-- 1 root root 336 Dec 25 14:16 content.txt
-rw-r--r-- 1 root root  65 Jan  6 00:06 example.bz2

 8、tar解压指定的文件(推荐)

#!/usr/bin/env python3
# encoding: utf-8

import os
import tarfile

dir_name = ‘outdir‘
os.mkdir(dir_name)
with tarfile.open(‘tarDir.tar‘, ‘r‘) as f:
    f.extractall(dir_name, members=[f.getmember(‘content.txt‘)])
print(os.listdir(dir_name))

arfile_extractall_member.py

运行效果

[[email protected] mnt]# python3 tarfile_extractall_member.py
[‘content.txt‘]

[[email protected] mnt]# ll outdir/
total 4
-rw-r--r-- 1 root root 336 Dec 25 14:16 content.txt

 9、tar压缩(归档)示例

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

with tarfile.open(‘tarfile_add.tar‘, ‘w‘) as out:
    out.add(‘content.txt‘)

with tarfile.open(‘tarfile_add.tar‘, ‘r‘) as rf:
    for member_info in rf.getmembers():
        print(member_info.name)

tarfile_add.py

运行效果

[[email protected]]# python3 tarfile_add.py
content.txt

[[email protected] mnt]# ll
-rw-r--r-- 1 root root   259 Jan  9 11:46 tarfile_add.py
-rw-r--r-- 1 root root 10240 Jan  9 11:46 tarfile_add.tar

 10、tar归档的时,修改文件名的示例

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

with tarfile.open(‘tarfile_addfile.tar‘, ‘w‘) as out:
    info = out.gettarinfo(‘content_update.txt‘, arcname=‘content.txt‘)
    out.addfile(info)

with tarfile.open(‘tarfile_add.tar‘, ‘r‘) as rf:
    for member_info in rf.getmembers():
        print(member_info.name)

tarfile_addfile.py

运行效果

[[email protected] mnt]# python3 tarfile_add.py
content.txt

[[email protected] mnt]# tar -tf tarfile_add.tar
content.txt

 11、tar从内存中取数据归档

#!/usr/bin/env python3
# encoding: utf-8

import io
import tarfile

text = ‘This is the data to write to the archive.‘
data = text.encode(‘utf-8‘)

with tarfile.open(‘addfile_string.tar‘, ‘w‘) as out:
    info = tarfile.TarInfo(‘make_up_file.txt‘)  # 创建一个文件的标签信息
    info.size = len(data)  # 设置空上标签的长度
    out.addfile(info, io.BytesIO(data))  # 如果fileobj有附值,则表示是一个二进制文件,会读取fileobj.size大小,取数据归档

with tarfile.open(‘addfile_string.tar‘, ‘r‘) as rf:
    for member_info in rf.getmembers():
        f = rf.extractfile(member_info.name)
        print(f.read().decode(‘utf-8‘))

tarfile_add_string.py

运行效果

[[email protected] mnt]# python3 tarfile_add_string.py
This is the data to write to the archive.

[[email protected] mnt]# ll
-rw-r--r-- 1 root root 10240 Jan  9 12:59 addfile_string.tar

 12、往tar追加文件归档

#!/usr/bin/env python3
# encoding: utf-8

import tarfile

# 创建tar归档文件
with tarfile.open(‘tarfile_append.tar‘, ‘w‘) as out:
    out.add(‘test.py‘)

# 查看tar里面的文件名字
with tarfile.open(‘tarfile_append.tar‘, ‘r‘) as rf:
    print([m.name for m in rf.getmembers()])

#往tar增加多一个文件归属
with tarfile.open(‘tarfile_append.tar‘,‘a‘) as add_f:
    add_f.add(‘__init__.py‘)

# 查看tar里面的文件名字
with tarfile.open(‘tarfile_append.tar‘, ‘r‘) as rf:
    print([m.name for m in rf.getmembers()])

tarfile_append.py

运行效果

[[email protected] mnt]# python3 tarfile_append.py
[‘content.txt‘]
[‘content.txt‘, ‘content_update.txt‘]

[[email protected] mnt]# tar -tf tarfile_append.tar
content.txt
content_update.txt

 13、tar归档并且压缩

#!/usr/bin/env python3
# encoding: utf-8

import tarfile
import os

fmt = ‘{:<30} {:<10}‘
print(fmt.format(‘filename‘, ‘size‘))
print(fmt.format(‘content.txt‘, os.stat(‘content.txt‘).st_size))

files = [
    (‘tarfile_compression.tar‘, ‘w‘),
    (‘tarfile_compression.tar.gz‘, ‘w:gz‘),
    (‘tarfile_compression.tar.bz2‘, ‘w:bz2‘),
]

for filename, write_mode in files:
    #设置归档的格式
    with tarfile.open(filename, mode=write_mode) as out:
        out.add(‘content.txt‘)

    print(fmt.format(filename, os.stat(filename).st_size), end=‘ ‘)
    print([m.name for m in tarfile.open(filename, ‘r:*‘).getmembers()])

tarfile_compression.py

运行效果

[[email protected] mnt]# python3 tarfile_compression.py
filename                       size
content.txt                    336
tarfile_compression.tar        10240      [‘content.txt‘]
tarfile_compression.tar.gz     361        [‘content.txt‘]  #大小被压缩
tarfile_compression.tar.bz2    341        [‘content.txt‘]

原文地址:https://www.cnblogs.com/ygbh/p/12169887.html

时间: 2024-11-06 15:08:01

Python之tarfile模块的使用的相关文章

python tarfile模块基本使用

1.压缩一个文件夹下的所有文件 #coding=utf8 import os import tarfile __author__ = 'Administrator' def main(): cwd = os.getcwd() tar = tarfile.open('test.tar','w:gz') for root ,dir,files in os.walk(cwd): for file in files: fullpath = os.path.join(root,file) tar.add(

python tarfile模块

tarfile模块的主要作用是用来加压缩和解压缩文件,其压缩文件的类型可以是 .tar  |  .tar.gz | .tgz | .tar.bz2 等 import os import tarfile 加压: tar = tarfile.open("/tmp/test.tar.gz","w:gz") for root,dir,files in os.walk("/home/red/桌面/test"): for file in files: apa

PYTHON学习第二模块 python内置模块介绍

1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # time.time()返回当前时间的时间戳timestamp(定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数)的方法,无参数 5 >>> time.asctime() 6 'Sun Apr 2 00:39:32 2017' 7 >>> # time.asctim

Python中subprocess 模块 创建并运行一个进程

python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" call(cmd, shell=True) 运行之后: 1:打开并浏览了test.txt文件 2:删除了test.txt文件 from subprocess import call import shlex cmd = &

python时间处理模块 datetime time模块 deltetime模块

1 首先介绍time模块,因为简单 python 自带模块 本人使用time模块,只使用两个函数 time函数和sleep函数 import time a.     time.time()   函数 返回unix时间  常用作两个时间差的计算 b.     time.sleep()  休眠多久,精度为子秒(subsecond) In [90]: t1 = time.time() In [91]: t1 Out[91]: 1461400225.877932 In [92]: time.sleep(

python安装mysqldb模块

今天在阿里云一台新的服务器部署程序后台,发现上面的python缺少MySQLDB 模块,记录安装过程. 首先django程序,运行 python manage.py sycdb 报错: ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb MySQLdb模块的包名字叫mysql-python,于是pip安装之,(关于pip,可以参考这篇文章) 运行: pip install mysql-python

Python 利用pytesser模块识别图像文字

使用的是python的pytesser模块,原先想做的是图片中文识别,搞了一段时间了,在中文的识别上还是有很多问题,这里做记录分享. pytesser,OCR in Python using the Tesseract engine from Google.是谷歌OCR开源项目的一个模块,可将图片中的文字转换成文本(主要是英文). 1.pytesser安装 使用设备:win8 64位 PyTesser使用Tesseract OCR引擎,将图像转换到可接受的格式,然后执行tesseract提取出文

python学习--创建模块

昨天做了python客户端和服务器端通信,并把接收到的信息写到数据库,因为对数据库进行操作是个经常调用的行为,所以我想把调用数据库的操作写成一个module来给其它python程序调用,所以将昨天的服务器端程序拆分为两个文件: 1.主程序python.py #!/usr/bin/env python import socket import json import connmysql s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) h

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST