gpt4 book ai didi

python - 读取 tarfile 内的大文件头 (~9GB),无需完全提取

转载 作者:行者123 更新时间:2023-12-01 04:19:56 26 4
gpt4 key购买 nike

我有 ~1GB *.tbz 文件。每个文件中都有一个约 9GB 的文件。我只需要读取该文件的 header ,即前 1024 个字节。

我希望尽快完成此操作,因为我有数百个要处理的 1GB 文件。提取大约需要1分30秒。

我尝试使用完全提取:

tar = tarfile.open(fn, mode='r|bz2')
for item in tar:
tar.extract(item)

tarfile.getmembers(),但速度没有提高:

tar = tarfile.open(fn, mode='r|bz2')
for member in tar.getmembers():
f = tar.extractfile(member)
headerbytes = f.read(1024)
headerdict = parseHeader(headerbytes)

getmembers() 方法一直在那里花费时间。

有什么办法可以做到这一点吗?

最佳答案

我认为你应该使用标准库bz2接口(interface)。 .tbztar 文件的文件扩展名,这些文件使用 -j 选项压缩以指定 bzip2 格式.

@bbayles评论中指出,您可以将文件打开为 bz2.BZ2File并使用seekread:

read([size])

Read at most size uncompressed bytes, returned as a string. If the size argument is negative or omitted, read until EOF is reached.

seek(offset[, whence])

Move to new file position. Argument offset is a byte count.

f = bz2.BZ2File(path)
f.seek(512)
headerbytes = f.read(1024)

然后您可以使用您的函数对其进行解析。

headerdict = parseHeader(headerbytes)

关于python - 读取 tarfile 内的大文件头 (~9GB),无需完全提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com