我有一个包含所有tar文件的ftp服务器,这些tar文件大到500MB +,而且它们太多了,我需要做的就是从包含多个文件的TAR中获取单个文件变成500MB +。
我最初的想法是下载每个tar文件并获取我需要的单个文件,但这似乎效率低下。
我使用Python作为编程语言。
答案 0 :(得分:0)
这个答案并不是特定于python的,因为问题不是python特有的:理论上你可以读取你的数据所在的Tar文件部分。使用FTP(以及pythons ftplib),这可以通过首先执行REST命令来指定文件中的起始位置,然后使用RETR开始下载数据,并在获得所需的数据量后,可以关闭数据连接。
但是,Tar是没有中心索引的文件格式,例如Tar中的每个文件都带有一个小标题,其中包含有关名称,大小等信息。因此,要获取特定文件,您必须读取第一个标头,检查它是否是匹配文件,如果不是,则跳过不需要的文件的大小并尝试使用下一个文件。使用Tar中的大量较小文件,这将比下载完整文件(或至少下载到相关部分 - 您可能在下载时解析文件)效率低,因为每次读取的所有这些新数据连接都会导致很多开销。但是如果你在Tar中有大文件,这可能会有用。
但是,如果它不是TAR(*.tar
),而是TGZ(*.tgz
或*.tar.gz
)文件,那么你完全没有运气。这些是压缩的Tar文件,并且可以获取解压缩之前所有内容所需的文件的任何部分。因此,在这种情况下,无法下载文件或至少将所有内容下载到相关部分。