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()