【问题标题】:Reading files from FTP server to DataFrame in Python在 Python 中从 FTP 服务器读取文件到 DataFrame
【发布时间】:2021-08-10 10:20:26
【问题描述】:

我想将文件从 FTP 服务器加载到 Pandas 数据帧中,而无需先将其下载到磁盘。我写了一个脚本来执行这个命令,但下载到磁盘。 这可能在 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)

【问题讨论】:

    标签: python pandas ftp ftplib


    【解决方案1】:

    如果你想坚持使用 ftplib,你可以这样做:

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

    【讨论】:

      【解决方案2】:

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

      with tentaclio.open("ftp://user:password@host/path/.../19001.V3status") as reader:
          df = pd.read_fwf(reader)
      

      【讨论】:

      • 感谢您推荐这个库。我对此有更多了解并尝试这种方式。
      猜你喜欢
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2020-11-07
      • 2013-08-25
      • 1970-01-01
      • 2012-07-30
      • 2020-10-25
      • 1970-01-01
      相关资源
      最近更新 更多