python3 编码与解码问题

python3中的转码,必须是byte类型的,str类型的会返回未定义方法。

示例代码如下

1 doc = pq(start_html.content) 
2 print("orig text=", doc.text())
3 byte1 = bytes(doc.text(),"utf-8")
4 print("dest text=", byte1.decode("gb2312"))

byte类型的decode和encode方法就是用来做转码的。

下面是例子:

import os
import zipfile


def unzip_dir(zipfilename):
    fullzipfilepath = os.path.abspath(zipfilename)  #压缩文件的绝对路径C:\xxx.zip
    print(fullzipfilepath)
    unzipdir = fullzipfilepath.split('.zip')[0][0:] #解压文件的根目录C:\
    if not os.path.exists(fullzipfilepath):
        print("Dir %s is not exists,input fullzipfilepaht")
        fullzipfilepath = input()
    if not os.path.exists(unzipdir):
        os.mkdir(unzipdir)
    zf = zipfile.ZipFile(fullzipfilepath, 'r')  #读方式打开压缩
    for filename in zf.namelist():  #zf.namelist() 获取压缩包文件中的文件列表
        print(filename)
        eachfilepath = os.path.normpath(os.path.join(unzipdir, filename))  #将文件路径转化为正常路径,
                                                             # 从压缩文件获取的文件列表中,获取的文件格式是xxxx.txt,       
        eachfiledir = os.path.dirname(eachfilepath)
        if not os.path.exists(eachfiledir):
            os.mkdir(eachfiledir)
            # os.makedirs(eachfiledir)  #使用makedirs(),递归创建目录,使用mkdir(),上级目录不存在,会报出异常
        fp = open(eachfilepath, 'w', encoding="utf-8")
        # fp.write(str(zf.read(filename)))
        # fp.write(str(zf.read(filename)))
        # print(zf.read(filename))
        # print("zf.read(filename)=", zf.read(filename).decode("gb2312"))
        print("zf.read(filename)=", zf.read(filename).decode("gbk"))
        # fp.write(str(zf.read(filename).decode("gb2312")))
        fp.write(str(zf.read(filename).decode("gbk")))
        fp.close()
    zf.close()


if __name__ == '__main__':
    zipfilename = "E:\\share\\python_excel\\20170710.zip"
    unzip_dir(zipfilename)

结果如图:

猜你喜欢

转载自blog.csdn.net/u012762054/article/details/78332688
今日推荐