Python:从FTP获取TAR中的单个文件



我有一个包含我所有tar文件的ftp服务器,这些tar文件有500MB以上,它们太多了,我所需要做的就是从包含多个文件的tar中获得一个文件,这些文件变成500MB以上。

我最初的想法是下载每个tar文件并获得我需要的单个文件,但这似乎效率低下。

我使用Python作为编程语言。

这个答案并不特定于python,因为问题并不特定于python:理论上,您可以读取tar文件中数据所在的部分。使用FTP(也可以使用python的ftplib),可以通过首先执行REST命令来指定文件中的起始位置,然后执行RETR以启动数据下载,在获得所需的数据量后,可以关闭数据连接。

但是,Tar是一种没有中心索引的文件格式,例如,Tar中的每个文件都带有一个小标题,其中包含有关名称,大小和其他信息。因此,要获得特定的文件,您必须读取第一个头,检查它是否是匹配的文件,如果不是,则跳过不需要的文件的大小并尝试使用下一个文件。如果Tar中有很多较小的文件,那么这将比下载整个文件(或者至少下载到相关部分——您可能会在下载时解析文件)的效率低,因为每次读取的所有这些新数据连接都会导致大量开销。但是如果你在Tar中有大文件,这可能会起作用。

但是,如果它不是TAR (*.tar)文件,而是TGZ (*.tgz*.tar.gz)文件,那么您就完全不走运了。这些是压缩后的tar文件,要获得文件的任何部分,您需要解压之前拥有的所有文件。所以在这种情况下,没有办法下载文件或至少下载到相关部分的所有内容。

最新更新