【问题标题】:Python: Get single file in a TAR from FTPPython:从 FTP 获取 TAR 中的单个文件
【发布时间】:2014-03-26 03:10:48
【问题描述】:

我有一个 ftp 服务器,其中包含我所有的 tar 文件,这些 tar 文件有 500MB 以上,而且它们太多了,我需要做的就是从包含多个文件的 TAR 中获取单个文件变为 500MB+。

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

我使用 Python 作为编程语言。

【问题讨论】:

  • 如果您不知道哪个 tar 文件保存您的文件,那么除非您建立一个将文件链接到 tar 文件的索引,否则没有其他解决方案。你可以在服务器上提取它们而不是下载它们,直到你找到你的文件,这将节省你一些时间,但还不够。 . .
  • 我认为首先是(ftp)服务器需要支持恢复下载(类似于HTTP Range header)。
  • @PyNEwbie,每个 TAR 都有我需要的文件,还有相同的文件名。

标签: python ftp tar tarfile


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,看来对我来说最好的方法是下载 TAR 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
相关资源
最近更新 更多