Python 解压zip、tar.gz、Rar 文件

一、说明

      为了解决自己对解压文件带来的工作压力,着手编写解压代码,发现Python能够很快完成。本次只是试验性质,但已能达到目标。

注意:本代码里的路径是绝对路径,看客请注意,使用请结合情况再做修改。

二、代码


#!/usr/bin/python
# -*- encoding:utf-8 -*- 

import zipfile,rarfile
import tarfile
import os,shutil

################################################################
##读取解压后的文件列表  Read_file_list()
#################################################################
def read_file_list(relase_file_dir):
    for root, dirs, files in os.walk(relase_file_dir, topdown=False):
 #       wildcard=".SchDoc,PcbDoc,.exe,.java"
        for name in files:
            print(os.path.join(root, name))
        for name in dirs:
            print(os.path.join(root, name))
###################
print("---输出所有文件及文件夹--------")
path = "D:/Data/temp"
unzip_path="D:/Data/temp/unzip/utarzip"

dirs = os.listdir(path)
for file in dirs:
    print(file)
'''
#--------解压当前目录下的所有ZIP文件-----------------    
file_list = os.listdir(r'.')
for file_name in file_list:
    if os.path.splitext(file_name)[1] == '.zip':
        print(file_name)
        file_zip = zipfile.ZipFile(file_name, 'r')
        for file in file_zip.namelist():
            file_zip.extract(file, r'.')
        file_zip.close()
#        os.remove(file_name)    
'''

#删除文件夹下的所有文件
def del_file(file_name):
    if os.path.exists(unzip_path):
        shutil.rmtree(unzip_path)
    else:
        print("-无此路径--")
    for str_i in os.listdir(file_name):
        del_path = os.path.join(file_name, str_i)
        os.remove(del_path)
#增加编码、解码,解决部分解出来后的乱码问题
# 默认模式r,读
relase_file_dir = "D:/Data/temp/unzip/"
del_file(relase_file_dir);   #删除文件夹下的所有文件

file_zip = zipfile.ZipFile("D:/Data/temp/zip/Desktop.zip", 'r')
# 返回所有文件夹和文件
for file in file_zip.namelist():
    file_zip.extract(file, relase_file_dir)
#    print(zip_file)
#    print(zip_file.encode('utf-8'))
    try:
        zip_file_name = file.encode('cp437').decode('gbk')
    except:
        zip_file_name = file.encode('utf-8').decode('utf-8')
    print(zip_file_name)

#    file_zip = zipfile.ZipFile("D:/Data/temp/zip/Desktop.zip", 'r')
#    for file in file_zip.namelist():
    os.chdir(relase_file_dir)
    os.rename(file, zip_file_name)
file_zip.close()   
########################################
#  解压RAR文件,需要import rarfile
#  需要把unrar.exe放到环境变量路径里,不然无法解压
################################
rar_path="D:/Data/temp/rar/Desktop.rar"
rf=rarfile.RarFile(rar_path)
rf.extractall(relase_file_dir)               #解压指定文件路径
print("OVER")
read_file_list(relase_file_dir)
################################################################
########################################
#  解压tar.gz文件
#  说明:
################################
tar_path="D:/Data/temp/tar/zn.tar.gz"
folder=os.path.exists(unzip_path)
if not folder:
    os.mkdir(unzip_path)
    print("cteate the path of utarzip")
else:
    print("alread have this folder")
rf=tarfile.open(tar_path)
rf.extractall(unzip_path)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,有很多函数和库可以用来解压.tar.gz文件。在大多数编程语言中,你都可以使用标准的库或第三方库来完成这个任务。 以下是几种常见语言的示例: Python: 你可以使用`tarfile`模块来解压.tar.gz文件。下面是一个简单的示例代码: ```python import tarfile def extract_tar_gz(file_path, extract_path): with tarfile.open(file_path, 'r:gz') as tar: tar.extractall(extract_path) # 使用示例 extract_tar_gz('file.tar.gz', 'extracted_folder') ``` Java: 你可以使用`java.util.zip`包中的`GZIPInputStream`和`TarInputStream`类来解压.tar.gz文件。以下是一个示例代码: ```java import java.io.*; import java.util.zip.GZIPInputStream; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.utils.IOUtils; public class ExtractTarGz { public static void extractTarGz(String file, String extractPath) throws IOException { try (InputStream is = new FileInputStream(file); GZIPInputStream gzipIs = new GZIPInputStream(is); TarArchiveInputStream tarIs = new TarArchiveInputStream(gzipIs)) { TarArchiveEntry entry; while ((entry = tarIs.getNextTarEntry()) != null) { File outputFile = new File(extractPath, entry.getName()); if (entry.isDirectory()) { if (!outputFile.exists()) { outputFile.mkdirs(); } } else { outputFile.getParentFile().mkdirs(); try (OutputStream outputFileStream = new FileOutputStream(outputFile)) { IOUtils.copy(tarIs, outputFileStream); } } } } } // 使用示例 public static void main(String[] args) throws IOException { extractTarGz("file.tar.gz", "extracted_folder"); } } ``` 这只是两种语言的示例,其他语言也有相应的库和函数来解压.tar.gz文件。你可以根据自己熟悉的编程语言选择合适的方法来解压文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值