2014-03-26 30 views
0

我有一個包含我所有tar文件的ftp服務器,這些tar文件大到500MB +,而且它們太多了,我需要做的就是獲得一個包含多個文件的TAR中的單個文件變爲500MB +。Python:從FTP獲取TAR中的單個文件

我最初的想法是下載每個tar文件並獲得我需要的單個文件,但這似乎是低效的。

我使用Python作爲編程語言。

+1

如果你不知道哪個tar文件保存你的文件,那麼除非你建立一個將文件鏈接到tar文件的索引,否則沒有其他解決方案。你可以在服務器上提取它們,而不是下載它們,直到找到你的文件爲止,這會爲你節省一些時間,但是不足。 。 。 – PyNEwbie

+0

我認爲首先是(ftp)服務器需要支持恢復下載(類似HTTP Range頭)。 –

+0

@PyNEwbie,每個TAR都有我需要的文件,也有相同的文件名。 – lexsanjose

回答

0

這個答案不是特定於python,因爲這個問題不是特定於python的:理論上你可以讀取你的數據所在的Tar文件的一部分。通過FTP(以及pythons ftplib),這可以通過首先執行REST命令來指定文件中的起始位置,然後通過RETR開始下載數據,並且在獲得所需的大量數據後,您可以關閉數據連接。

但是,Tar是沒有中央索引的文件格式,例如, Tar中的每個文件都帶有一個帶有名稱,大小和其他信息的小標題。因此,要獲取特定的文件,您必須閱讀第一個標題,檢查它是否爲匹配文件,如果不是,則跳過不需要的文件的大小,然後嘗試下一個。在Tar​​中有很多較小的文件會比下載整個文件(或者至少下載到相關部分 - 下載時可能解析該文件)效率低,因爲每個讀取的所有這些新數據連接都會導致大量f開銷。但是如果你在Tar中有大文件,這可能會起作用。

但是,如果它不是TAR(*.tar),而是TGZ(*.tgz*.tar.gz)文件,則完全不幸運。這些是壓縮的Tar文件,並獲得文件的任何部分,您需要解壓縮之前的所有文件。所以在這種情況下,無法下載文件或至少將所有內容都下載到相關部分。

+0

謝謝,看起來對我來說最好的辦法就是下載TAR文件。 – lexsanjose