通过FTP下载zip文件并在内存中解压文件的Python方法

1 投票
4 回答
8378 浏览
提问于 2025-04-17 13:40

我想通过ftp下载一个zip文件,但我不想把这个zip文件保存下来,直接提取里面的文件。有没有人知道我该怎么做?

4 个回答

0

zipfile模块可以用来从压缩文件中提取内容,而ftplib则是用来访问这个压缩文件的。不过,ftplib并没有提供一个像文件一样的对象给zipfile使用,这样zipfile就无法直接访问文件的内容。我想你可以先读取整个压缩文件并把它存储在内存中,比如放在一个字符串里,然后再把这个字符串包装成一个像文件的对象(StringIO),不过这样你还是会把整个压缩文件读进来,只是没有把它保存到硬盘上。

如果你不需要保存里面的单个文件,只是想访问(也就是读取)它们,zipfile是可以做到这一点的。

6

使用 zipfile.open

这个方法可以把压缩文件里的某个文件加载到内存中。因为ZipFile可以接受任何类似文件的对象作为参数,所以你可以从很多地方获取这些文件,比如HTTP或FTP服务器。

import urllib
import io
from zipfile import ZipFile

mysock = urllib.urlopen('ftp://ftp.yourhost.com/spam.zip')  // check urllib for parameters
memfile = io.BytesIO(mysock.read())
with ZipFile(memfile, 'r') as myzip:
    f = myzip.open('eggs.txt')
    content = f.read()  // or other file-like commands

另外,你也可以查看 Python内存中的压缩库

4

ftplib模块可以让你通过FTP下载文件。

zipfile模块可以让你从压缩文件中提取文件。

这里有个重点,io.BytesIO类可以让你把内存中的字节数据传递给任何需要文件的地方。(在Python 2.x中,StringIO模块提供了类似的功能。)

撰写回答