记录一次windows平台python解决zipfile解压乱码的问题

工作中使用到了解压文件,提取压缩文件,很简单python的zipfile是一个很成熟的库,没错,直接上手使用了,刚开始运行还是正常的,中间突然大批量的文件无法正常提取文件了,经过多方测试,发现是中文命名乱码导致无法正常解压,很多人说直接decode这些知识点,都无法正常解决问题,最后彻底解决问题的方法是直接执行压缩包的命令进行操作,记录代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import os.path
import zipfile
import rarfile
import shutil
import win32com
import datetime
from nt import chdir
import chardet

def find_last(string,str):
    last_position=-1
    while True:
        position=string.find(str,last_position+1)
        if position==-1:
           return last_position
        last_position=position

#日志记录方法
def writeLog(content):
    log_name = str(datetime.datetime.now().year) + "-" + str(datetime.datetime.now().month) + "-" + str(datetime.datetime.now().day) + ".txt";
    # 检查今天的日志文件是否存在
    fp = open("D:\\py\\pyproject\\logs\\" + log_name, 'a')
    fp.write(content + "\r")
    fp.close()
def winRarZip():

    rar_zip_path = "D:\\officerar";
    file_path = "D:\\officeunzip\\";
    tmp_z_name = '';
    for fn in (fns for fns in os.listdir(rar_zip_path)):
        try:
               print fn
               print os.path.splitext(fn)[0]
               file_name = os.path.splitext(fn)[0]
               dest_dir = file_path+file_name
               is_exist = os.path.exists(dest_dir)
               
               if is_exist == False:
                   os.mkdir(dest_dir)
               src_zip = 'D:\\officerar\\'+fn
               for fn in (fns for fns in os.listdir(dest_dir)):
                          
                          son_file_path = dest_dir+"\\"+fn
                          is_exist_file = os.path.exists(son_file_path)
                          if is_exist_file == True:
                                os.remove(son_file_path)
               zip_command = 'WinRAR x {0} {1} -o+ -inul -iback -y'.format(src_zip,dest_dir)
               if os.system(zip_command)==0:
                      #print 'Successful'
                      flag = 0
                      for fn in (fns for fns in os.listdir(dest_dir)):
                          
                         print fn
                         position = find_last(fn,".")
                         #if(position == -1):
                         #    writeLog(os.path.splitext(fn)[0]+"是文件夹")
                         #print position
                         extension = fn[position+1:-1]
                         #print extension
                         if extension == "ppt" or extension == "pptx" :
                               flag = 1
                               mycopyfile(dest_dir+"\\"+fn,'D:\\officepsd\\'+file_name+'.pptx')
                               
                      if flag == 0:
                           writeLog(file_name+ "不是ppt文件")
                          
               else:  
                      print 'FAILED'
                      
        except Exception,e:
            
            print e
            writeLog(fn+"解压异常")
            continue;

if __name__ == '__main__':

    print "unzip........."
    winRarZip()








 

解决问题的方法很多,路径很多,不一定一条路找到底,zipfile确实费了很多时间,对中文就是支持不太好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值