2020-05-13zipfile乱码及glob等

2020-05-13  本文已影响0人  lzjngu

zipfile读取支持cp437和utf-8两种编码,因此显示时要解码成特定环境的编码(比如win系统为gbk),不然会出现乱码。实例如下:

import zipfile

# 默认模式r,读
azip = zipfile.ZipFile("/myfile/test.zip", 'r')
# 返回所有文件夹和文件
zip_list = azip.namelist()
for zip_file in zip_list:
    print(zip_file)
    print(zip_file.encode('utf-8'))
    try:
        zip_file = zip_file.encode('cp437').decode('gbk')
    except:
        zip_file = zip_file.encode('utf-8').decode('utf-8')
    print(zip_file)

总之,转换成unicode,压缩前是什么编码,使用什么编码encode再decode回来
参考链接:
https://www.cnblogs.com/yaomaomao/p/8671344.html

rar, zip,tar, gz压缩,解压缩文件参考:
https://www.cnblogs.com/claireyuancy/p/6702340.html

glob的使用
glob模块可以查找符合特定规则的文件路径名。查找文件只用到三个匹配符:”* ”, “?”, “[]”。”* ”匹配0个或多个字符;”?”匹配单个字符;”[]”匹配指定范围内的字符,如:[0-9]匹配数字。

glob.glob
返回所有匹配的文件路径列表。该方法需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。下面是使用glob.glob的例子:

import glob

#获取指定目录下的所有图片
print (glob.glob(r"/home/data/*/*.png"),"\n")#加上r让字符串不转义

#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径

glob.iglob
获取一个迭代器( iterator )对象,使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而 glob.iglob一次只获取一个匹配路径。下面是一个简单的例子:

f = glob.iglob(r'../*.py')
print(f)
<generator object iglob at 0x00B9FF80>

for py in f:
    print(py)

官方例子

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

参考及转载:
https://blog.csdn.net/GeorgeAI/article/details/81035422
https://blog.csdn.net/u010472607/article/details/76857493/

上一篇下一篇

猜你喜欢

热点阅读