Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用7zip(lzma)读取python中的utf-8编码文件_Python_String_Encoding_Compression_Lzma - Fatal编程技术网

如何使用7zip(lzma)读取python中的utf-8编码文件

如何使用7zip(lzma)读取python中的utf-8编码文件,python,string,encoding,compression,lzma,Python,String,Encoding,Compression,Lzma,我正在使用以下命令压缩文件: import lzma myData = ("12+34+113+32+81+92+27...").encode() obj = lzma.LZMAFile(filename, mode="wb") obj.write(myData) obj.close() 然后我试着打开它 obj = lzma.LZMAFile(filename, mode="rb") data = obj.read() 但我得到U

我正在使用以下命令压缩文件:

import lzma
myData = ("12+34+113+32+81+92+27...").encode()
obj = lzma.LZMAFile(filename, mode="wb")
obj.write(myData)
obj.close()
然后我试着打开它

obj = lzma.LZMAFile(filename, mode="rb")
data = obj.read()
但我得到UNICODECODEERROR:“utf-8”编解码器无法解码位置0中的字节0xfd:无效的起始字节

为什么没有编码错误,只有解码错误?
我尝试压缩字符串以保存字节。

从第50行开始,以二进制模式创建LZMA压缩文件,其位置参数等效于
filename=mode,mode=“wb”

如果压缩和冗余:
打印(“编码和压缩…”)
aux=(aux[:-1])。编码(“utf-8”)
obj=lzma.LZMAFile(模式,“wb”)
打印(“写入文件”)
对象写入(辅助)
对象关闭()
返回0
然后将
aux
(类型为
bytes
)写入LZMA压缩文件

从第121行开始,使用3个位置参数调用
lzma.open()
,显示的参数无效。最多可以有2个位置参数,然后其他所有参数都必须使用关键字参数指定。除此之外,
r+b
未作为
模式
参数的有效值列出。文件规定:

对于二进制模式,模式参数可以是“r”、“rb”、“w”、“wb”、“x”、“xb”、“a”或“ab”中的任意一个,对于文本模式,模式参数可以是“rt”、“wt”、“xt”或“at”。默认值为“rb”

如果压缩:
打印(“启动解压缩…”)
以lzma.open(文件[i]、“r+b”、“utf-8”)作为lzmaFile:
#obj=lzma.LZMAFile(文件[i],mode=“r”)
fContent=lzmaFile.read()
最初写入lzma文件时,您编写了一个
bytes
对象。当您读取lzma文件时,您再次得到相同的
bytes
对象。要获取原始的
str
,请调用
bytes
对象的
decode()
方法,使用与编码相同的编码(在本例中为
utf-8

如果压缩:
打印(“启动解压缩…”)
将lzma.open(文件[i])作为f:
未压缩_str=f.read().decode(“utf-8”)

只要我删除
filenames
中的
s
,就可以了:
obj=lzma.LZMAFile(filename,mode=“rb”)
obj=lzma.LZMAFile(filename,mode=“rb”)
这是一个最小的复制代码。原件在这里。而且我试了很多次都没能修好。也许我应该开发一个模块来使用C编写文件?我找不到解决办法。没有必要开发一个使用C编写文件的模块。请始终参阅。仔细阅读。特别注意函数/方法签名。关于传递参数,似乎你正在尝试一切/任何事情,并希望得到最好的结果。实际上,你发现了错误。我以前打开过这个文件,因此崩溃了。无论如何,谢谢你的时间和良好的反应。当我获得更多的声誉时,我会把你的答案标记为解决方案。