python库zipfile读取压缩包文件或者文件夹报错的问题

1.首先在python文件引入(本人用的python版本是2.7.15)

import zipfile

2.判断是否是zip压缩包

  file_name ="test.rar"
  file_name_path = 'temp/upload/' + file_name
  is_zipfile_flag = zipfile.is_zipfile(file_name_path)
  if not is_zipfile_flag:
     print("not a zip file")

3.把目录路径添加到一个数组中(比如:/test/我是文件夹/我是文件.txt,用append添加到数组就会报错)

 get_inside_zip_name="压缩包.zip"
 file_inside_name_path = "temp/upload/" + get_inside_zip_name
 try:
     file_tree_inside=[]
     zf_inside = zipfile.ZipFile(file_inside_name_path, 'r')
     except Exception:
        print("error")      
     for info in zf_inside.infolist():
        #gbk转码的方式添加到数组,不会报错
        file_tree_inside.append("%s" % (str(info.filename.decode("gbk", "ignore"))))

4.读取文件内容的时候(路径含有中文名open文件和文件内容有乱码的内容append添加文件到数组也会报错)

 # 定义获取文件总数据的对象
 file_content_obj = {} 
 #比如文件路径是这样的(压缩包里面的文件路径)
 file_path ='/test/文件夹/文件.html'
 #压缩包名字
 zip_name='test.zip'
 #压缩包上传的路径(当然这个是我自己的这边的)
 zip_file_name_path = 'temp/upload/' + zip_name
 file_content_arr = []
 file_path_arr = file_path.split("/")
 #过滤出要读取内容的文件
 file_name = file_path_arr[len(file_path_arr) - 1]
 zf = zipfile.ZipFile(zip_file_name_path, 'r')
 #打开文件的时候要转码,因为有中文会报错
 zfOpen = zf.open(file_path.encode('gb2312'),'r')
 try:
      #打开文件的时候要转码,因为有中文会报错
     azip_info = zf.getinfo(file_path.encode('gb2312'))
     #文件的大小
     file_content_obj['file_size'] = azip_info.file_size
     #文件的创建时间
     file_content_obj['file_time'] = azip_info.date_time
     #判断文件的大小500000等于500kb
     if azip_info.file_size >500000:
         file_content_arr.append('文件过大不读取,只支持读500kb以下的文件!')
     else:
        # 如果是txt文件要用gbk解码,中文才不会乱码,用gbk会乱码(看情况而定吧)
         if '.txt' in file_name:
             for file_content_data in zfOpen.readlines():
                 file_content_arr.append("%s" % (str(file_content_data.decode("gbk", 
 "ignore"))))
               else:
                   # 其他像lua或者xml文件要用utf-8解码,中文才不会乱码,用gbk会乱码(看情况而定吧)
                    for file_content_data in zfOpen.readlines():
                       file_content_arr.append("%s" % (str(file_content_data.decode("utf-
 8", "ignore"))))
 zfOpen.close()

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值