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)
结果如图: