Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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
Python 将多个文件中的二进制数据读入存档文件,然后将其解压缩_Python_Decode_Encode_Archive - Fatal编程技术网

Python 将多个文件中的二进制数据读入存档文件,然后将其解压缩

Python 将多个文件中的二进制数据读入存档文件,然后将其解压缩,python,decode,encode,archive,Python,Decode,Encode,Archive,我想将多个文件合并到一个存档中。我使用Python2.7来实现这一点。这是我的密码: 从每个文件中读取二进制数据的代码(有些是带有utf8的txt文件,有些是png或jpeg文件): 这样就可以了,所有的二进制数据都被归档到一个文件中。现在我想提取归档文件,我这样做: def read_file(self, filename): if self._writable(): print("curr mode is write, cannot read")

我想将多个文件合并到一个存档中。我使用Python2.7来实现这一点。这是我的密码:

从每个文件中读取二进制数据的代码(有些是带有utf8的txt文件,有些是png或jpeg文件):

这样就可以了,所有的二进制数据都被归档到一个文件中。现在我想提取归档文件,我这样做:

   def read_file(self, filename):

    if self._writable():
        print("curr mode is write, cannot read")
        return None

    entry = self._get_entry(filename)

    if not entry:
        print("the file is not in curr archive:"+filename)
        return None

    self.file.seek(entry.file_offset)
    data = self.file.read(entry.file_size)

    if not data:
        print("file read error:"+filename)
        return None

    return data


def extract_file(self, filename):

    print("extract_file:"+filename)

    data = self.read_file(filename)
    if not data:
        return

    targetFile = self._fullname(filename)

    self._makepath(targetFile)

    with open(targetFile, 'wb') as f:
        f.write(data or b'')


def extract_all(self):

    for entry in self.entries:
        self.extract_file(entry.file_name)
每个文件提取都成功,但每个文件提取中的所有数据都是二进制数据,我希望它们是以前的样子

我试着编码和解码,但没有帮助~


有人能帮我吗?非常感谢

您是否有正当理由不使用数据创建tar.gz文件?它将它变成一个无损的二进制数据块,pythons tar库非常好。“但是每个文件提取中的所有数据都是二进制数据,我希望它们是以前的样子。”从技术上讲,在压缩它们之前,文件是由字节组成的,而在提取之后,它们仍然是字节。这只是一个如何表示/解释字节的问题。您的文件内容是否发生了更改,或者只是缺少了原始文件名/扩展名?@pyInTheSky我想为我的游戏制作一个mpq存档。我有很多资源文件,我不想在游戏运行时解压缩它们,因为速度太快了。所以我想把所有文件合并成一个文件,我可以在内存中读取它们。@jDo是的,我知道这一点。我的意思是有些文件是txt格式的,内容像“文件是可读的”,但当我提取它时,它的内容是“0011 ddcc dddd 99de…”,我希望它是“文件是可读的”@chenjie19891104你可以只是tar-它不压缩---并且仍然给你一个很好的存档。。。gz或bz2等是压缩部分
   def read_file(self, filename):

    if self._writable():
        print("curr mode is write, cannot read")
        return None

    entry = self._get_entry(filename)

    if not entry:
        print("the file is not in curr archive:"+filename)
        return None

    self.file.seek(entry.file_offset)
    data = self.file.read(entry.file_size)

    if not data:
        print("file read error:"+filename)
        return None

    return data


def extract_file(self, filename):

    print("extract_file:"+filename)

    data = self.read_file(filename)
    if not data:
        return

    targetFile = self._fullname(filename)

    self._makepath(targetFile)

    with open(targetFile, 'wb') as f:
        f.write(data or b'')


def extract_all(self):

    for entry in self.entries:
        self.extract_file(entry.file_name)