python实现文件压缩与解压

     最近刚刚开始学习Python,现在分享一个小代码,实现文件的压缩与解压。希望能给那些和我一样,刚刚学习Python的小伙伴们一些小小帮助。

方法一:通过zipfile模块实现文件的压缩与解压

# -*- coding:utf8 -*-
import zipfile
import time
import os

# 使用ZipFile('压缩包完整路径')方法获得压缩文件
zipfiles=zipfile.ZipFile(r'D:\python\Python27\backupTestProject\20180719\134059_test2_projet.zip')

# 返回该压缩包下的文件夹与文件名称
print (zipfiles.namelist())
print (zipfiles.namelist()[1])

# 获取zip文件名(包括完整路径)
print zipfiles.filename



# 法1:(使用文件路径直接读取文件内容)
text = zipfiles.read('python/Python27/testProject/hello.py').decode('utf-8')
print(text)

# 获取hello.py文件(通过压缩文件路径加文件名获得,
# 注意路径是从打开压缩包的第一个文件夹名称算起,不包含压缩包名字)
hellofile = zipfiles.getinfo('python/Python27/testProject/hello.py')

# 法2:或通过刚刚获取的hello.py文件直接打开读取(先获取文件再读内容)
text2 = zipfiles.open(hellofile).read()
print('-------------------------分隔符----------------------------')
print text2

# 循环读取压缩包下所有文件内容与文件名字
name = '' # 定义一个name变量,用来记录压缩包里的文件名
for i in zipfiles.namelist(): # for循环,in后面必须为序列,此时为文件名列表
    name = i # i即是当前文件名
    if name.find('.py') != -1: # 若果文件中包含.py则继续处理
        print '文件名字是:',name # 输出文件名
        print '文件内容是:'
        print zipfiles.read(name) # 输出文件内容(文件的名即为在压缩包中文件对应的路径)
        print '---------NEXT----------'


# 解压文件到指定路径(若不指名路径则会解压到当前工作目录)
zipfiles.extractall(r'D:\python\Python27\backupTestProject'+os.sep+time.strftime('%Y%m%d'))



#压缩文件夹
# 使用ZipFile('压缩包完整路径')方法获得压缩文件
zipfiles1=zipfile.ZipFile(r'D:\python\Python27\backupTestProject\20180719\test.zip','w') # 指定压缩包生成路径与名字,使用参数'w'当压缩包不存在时则创建新的;若存在则覆盖

# os.walk(r'D:\python\Python27\testProject')会递归查找,遍历所有入参目录下文件夹,取出所有文件
for current_path, subfolders, filesname in os.walk(r'D:\python\Python27\testProject'): # 使用此形式可以获得当前路径current_path(当前路径为walk参数的路径,当参数路径下有文件夹时,当前路径会转为参数路径下的文件夹处截止),当前路径下的子目录subfolders,当前目录下文件名filesname
    print filesname

    for file in filesname:
        zipfiles1.write(os.path.join(current_path, file)) # 文件压缩,压缩路径为参数路径



zipfiles.close() # 使用之后要关闭zipfile

方法二:通过调用系统zip命令实现文件备份(压缩)

# -*- coding:utf8 -*-
# !/usr/bin/python
# Filename: backup_ver1.py
# 备份文件
import os
import time

# 1. 需要备份的路径(生成的压缩包会保持此路径结构)
source = r'D:\python\Python27\testProject'
# If you are using Windows, use source = [r'C:\Documents', r'D:\Work'] or something like that

# 2. 想要保存备份的主目录
target_dir = r'D:\python\Python27\backupTestProject' # Remember to change this to what you will be using

# 如果目标目录还不存在,则进行创建
if not os.path.exists(target_dir):
    os.mkdir(target_dir)
# 创建当天的文件夹(文件夹路径为:备份主目录下生成当天年月日命名的文件夹),如果当天命名的文件夹不存在,则新建
today_dir = target_dir+os.sep+time.strftime('%Y%m%d') # os.sep产生路径分隔符。即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作。
if not os.path.exists(today_dir):
    os.mkdir(today_dir)
# 3. The files are backed up into a zip file.
# 4. 拼装完整压缩包信息(路径+压缩包名+.zip后缀):
# 注意today_dir后面要追加\分割符(但是windows中\为转义字符,所以要写\\),如果不写分隔符则会将最后的backupTestProject作为文件名的一部分
# target = today_dir +os.sep+ time.strftime('%H%M%S') + '.zip'  # 目前的日期和时间,我们使用time.strftime()函数获得

# 手工输入字符串,拼装target路径(若没有输入,则使用原来target;若输入有值,则将值加入zip名称中)
comment = raw_input('Please enter comment -->')
if len(comment) == 0:
    target = today_dir + os.sep + time.strftime('%H%M%S') + '.zip'
else:
    target = today_dir + os.sep + time.strftime('%H%M%S') +\
             '_'+comment.replace(' ','_')+ '.zip'
# 5. 拼装 zip command 字符串
zip_command = "zip -qr %s %s" % (target, source)

# Run the backup
if os.system(zip_command) == 0:  # os.system函数运行命令,就像在系统中运行命令一样。系统执行zip命令,若执行成功会返回0
    print 'Successful backup to', target
else:
    print 'Backup FAILED'



# 输出:改进版本二,提示输入,将输入的字符串拼到zip名字里,每次都在目标路径下生成一个年月日命名的文件夹,文件夹里是时分秒命名的zip,此时更有层次感

 

你可能感兴趣的:(python实现文件压缩与解压)