Ftp pycurl和MLST

Ftp pycurl和MLST,ftp,pycurl,Ftp,Pycurl,出于几个原因,我们希望使用pycurl获取存储在具有的FTP服务器上的文件的信息 通过以下代码,我们几乎可以得到我们所需要的: #大致相当于:curl--list-X MLST-D/tmp/headersftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt 导入pycurl 尝试: 从io导入字节io 除恐怖外: 从StringIO将StringIO作为字节导入 c=pycurl.Curl() c、 se

出于几个原因,我们希望使用
pycurl
获取存储在具有的FTP服务器上的文件的信息

通过以下代码,我们几乎可以得到我们所需要的:

#大致相当于:curl--list-X MLST-D/tmp/headersftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt 
导入pycurl
尝试:
从io导入字节io
除恐怖外:
从StringIO将StringIO作为字节导入
c=pycurl.Curl()
c、 setopt(c.URL,r'ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt')
c、 setopt(pycurl.DIRLISTONLY,True)
#使用MLST
c、 setopt(c.CUSTOMREQUEST,“MLST”)
#将头写入缓冲区
输出=BytesIO()
c、 setopt(pycurl.HEADERFUNCTION,output.write)
#执行请求
c、 执行
#打印页眉
结果=输出。getvalue()
结果=结果。解码('ISO-8859-1')
perform()。如果尝试CLI版本,返回代码也是CURLE\u FTP\u couldn\u RETR\u FILE,但文件
/tmp/headers
包含数据

我们认为这与
MLST
使用控制连接而不是数据连接有关

有什么想法吗

编辑1


我们还没有找到一种不使用
DIRLISTONLY
的方法来获得结果(这很奇怪)。另外,如果我们使用
无人
,我们就得不到答案

编辑2


结果是
result
包含有关目录的信息(
ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/
)不是文件,因此此处的代码不正确

事实证明,这很难做到(如果不是不可能的话)(请参见编辑2)。然而,一个简单的代码可以获得最重要的信息(文件大小和上次修改时间)

代码基于方法(和选项):

导入pycurl
尝试:
从io导入字节io
除恐怖外:
从StringIO将StringIO作为字节导入
导入日期时间
c=pycurl.Curl()
c、 setopt(c.URL,r'ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt')
c、 setopt(pycurl.NOBODY,True)
c、 setopt(pycurl.OPT_FILETIME,True)
#执行请求
c、 执行
#打印信息
timestamp=c.getinfo(pycurl.INFO\u FILETIME)
打印(datetime.datetime.fromtimestamp(时间戳))
打印(c.getinfo(pycurl.CONTENT\u LENGTH\u下载))
当然,我们使用避免下载文件

这或多或少相当于命令:

$ curl --head ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt
Last-Modified: Thu, 07 Nov 2019 11:58:21 GMT
Content-Length: 1207490
Accept-ranges: bytes

您可能需要设置
CURLOPT\u没有人
+不设置
DIRLISTONLY
也可以帮助您(您没有做目录列表-什么会涉及数据连接)。+在本机Python ftplib中执行此操作将更加简单和直接。我们还没有找到一种在没有
DIRLISTONLY
的情况下获得结果的方法,并且使用
NOBODY
也没有帮助(我们以前尝试过-我将更新问题)。我们知道如何使用
ftplib
处理这个问题,但我们的整个软件都是基于
pycurl
的,所以我们希望使用它。