如何从安全FTP服务器读取CSV到Pandas DataFrame

时间:2017-09-26 22:46:47

标签: python python-3.x pandas csv ftp

我在安全的FTP服务器上有一组CSV文件,我试图在内存中读取(单独)Pandas DataFrames,以便我可以操作它们然后通过API将它们传递到其他地方。 FTP服务器需要身份验证,这意味着我无法使用非常有用的pd.read_csv()直接从服务器读取csv。

以下(Python 3.x)代码将连接,然后将文件写入磁盘:

from ftplib import FTP
import pandas as pd

server = "server.ip"
username = "user"
password = "psswd"

file1 = "file1.csv"  # Just one of the files; I'll eventually loop through...

ftp = FTP(server)
ftp.login(user=username, passwd=password)

with open(filename, "wb") as file:
    ftp.retrbinary("RETR " + filename, file.write)

# Do some other logic not relevant to the question

我希望避免将文件写入磁盘然后重新读取。我知道pd.read_csv()将直接从公共地址读取csv文件,但我看不到任何示例如何在登录后门控文件时这样做。

2 个答案:

答案 0 :(得分:1)

IIRC您可以使用urllib2执行经过身份验证的FTP请求。也许像是

import urllib2, base64
import pandas as pd

req = urllib2.Request('ftp://example.com')
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string) 
response = urllib2.urlopen(req)
data = pd.csv_read(response.read())

未经测试,但您可以找到更多信息urllib2 here

答案 1 :(得分:0)

感谢 John Zwinck,我做了以下事情:

import pandas as pd
import pysftp as sftp

with sftp.connect(your_host, your_user, your_pw) as conn:
    with conn.open("path_and_file.csv", "r") as f:
        df = pd.read_csv(f)

它工作得很好。最好的问候。