Python:从FTP获取TAR中的单个文件
我有一个FTP服务器,上面存放着我所有的tar文件,这些tar文件的大小都超过500MB,而且数量很多。我只需要从一个包含多个文件的tar文件中提取出一个单独的文件,这个tar文件的大小也超过500MB。
我最开始的想法是下载每一个tar文件,然后再从中找出我需要的那个文件,但这样做似乎效率不高。
我使用Python作为编程语言。
1 个回答
0
这个回答并不是专门针对Python的,因为这个问题也不只限于Python:理论上,你可以直接读取Tar文件中存放你数据的部分。通过FTP(还有Python的ftplib库),你可以先发送一个REST命令来指定文件的起始位置,然后用RETR命令开始下载数据,等你下载到需要的数据量后,就可以关闭数据连接。
不过,Tar是一种没有中心索引的文件格式,比如说,Tar中的每个文件前面都有一个小的头部,里面包含了文件名、大小等信息。所以要获取特定的文件,你必须先读取第一个头部,检查它是否是你想要的文件。如果不是,你就得跳过这个文件的大小,继续尝试下一个。对于Tar中有很多小文件的情况,这种方法比直接下载整个文件(或者至少下载到相关部分)要低效得多,因为每次读取都需要建立新的数据连接,这样会造成很多额外的开销。但如果Tar中有大文件,这种方法可能就能奏效。
不过,如果文件不是TAR(*.tar
),而是TGZ(*.tgz
或*.tar.gz
)文件,那你就完全没戏了。这些是压缩过的Tar文件,要获取文件的任何部分,你必须先解压缩所有内容。所以在这种情况下,你只能下载整个文件,或者至少下载到相关部分。