我在安全的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文件,但我看不到任何示例如何在登录后门控文件时这样做。
答案 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)
它工作得很好。最好的问候。