将文件从ftp服务器读取到DataFrame python

将文件从ftp服务器读取到DataFrame python,python,pandas,ftp,ftplib,Python,Pandas,Ftp,Ftplib,我想加载一个文件从FTP服务器到df,而不下载到磁盘上的第一。我已经编写了一个脚本来执行这个命令,但是需要下载到磁盘。 在ftplib库中可以这样做吗?你认为这个问题有什么解决办法吗 from ftplib import FTP import os import pandas as pd ftps = FTP('gssc.esa.int') ftps.login() ftps.cwd('/gnss/data/daily/2019/001/') filename = '19001.V3status

我想加载一个文件从FTP服务器到df,而不下载到磁盘上的第一。我已经编写了一个脚本来执行这个命令,但是需要下载到磁盘。 在ftplib库中可以这样做吗?你认为这个问题有什么解决办法吗

from ftplib import FTP
import os
import pandas as pd
ftps = FTP('gssc.esa.int')
ftps.login()
ftps.cwd('/gnss/data/daily/2019/001/')
filename = '19001.V3status'
local_filename = os.path.join(r"C:/path/where/download/files", filename) #example
lf = open(local_filename, "wb")
ftps.retrbinary('RETR ' + filename, lf.write)
file = "C:/path/where/download/files/" +filename #example
dataV3status = pd.read_fwf(file,
                           names = ('Mon_ID', 'Full_Mon_ID', 'RNX_Ver.', 'Dly(H)',
                                    'Dly(M)', 'V', 'Receiver_Type', 'Antenna_Type',
                                    'Mkr_Name', 'Marker_Number', 'Typ', 'G', 'R', 'E',
                                    'C', 'J', 'S', 'I', 'MD5_Checksum'), 
                           widths = [5,9,5,5,6,2,20,22,5,10,3,3,2,2,2,2,2,2,32],
                           header = None,
                           skiprows = 5,
                           skipfooter = 16)

是的,您可以使用包来流式传输文件


如果您想坚持使用ftplib,可以执行以下操作:

from io import BytesIO

flo = BytesIO()
ftp.retrbinary('RETR ' + filename, flo.write)
flo.seek(0)
pd.read_fwf(flo, ...)

谢谢你推荐这个图书馆。我对它有了更多的了解,并尝试了这种方法。它很有效,非常感谢。
from io import BytesIO

flo = BytesIO()
ftp.retrbinary('RETR ' + filename, flo.write)
flo.seek(0)
pd.read_fwf(flo, ...)