使用 ftplib 打开 FTP 中的 json 文件

Open a json file in a FTP using ftplib

在我们的项目中,我们需要使用 ftplib 模块。我正在使用 ftplib 读取 FTP 中 json 文件的内容,但它显示错误 [Errno 2] No such file or directory: 'test.json'
这是简单的代码:

from ftplib import FTP
    
networkconnect = 'ftp.test123.com'
usern = '123'
pwconnect = 'test123'

ftp = FTP(networkconnect, usern, pwconnect)
ftp.cwd('/testpath')
with open('test.json', 'r') as j:
    json_data = json.load(j)

我尝试使用 ftputil 等其他模块,它会打开 json 文件

例如:

import ftputil

networkconnect = 'ftp.test123.com'
usern = '123'
pwconnect = 'test123'

test_host = ftputil.FTPHost(networkconnect, usern, pwconnect)
test_host.chdir('/testpath')
with test_host.open('test.json', 'r') as j:
    json_data = json.load(j)

但是由于我需要使用 ftplib,我想知道是否有任何解决方法可以使用 [=] 在 ftp 中打开 json 文件27=]库?

提前谢谢大家

试试这个方法:先下载文件到本地,然后尝试打开它。

currentDirectory = os.getcwd()
save_directory = os.path.join(currentDirectory, 'file.json') 

def download():
    try:
        ftp = ftplib.FTP('host', 'login', 'pass')
        files = ftp.nlst()
        filename = files[0] # get first file

        ftp.retrbinary("RETR " + filename, open(save_directory, 'wb').write)
        ftp.close()

        return True
    except Exception as e:
        print(e)
        return False

if download():
   with open(save_directory, 'r') as j:
    json_data = json.load(j)

我在 Raspberry Pi 2B 上有这个 运行。它不接触本地文件系统。它是 Python 2.x,我已将其简化为基础知识。远程文件内容被复制到本地 RAM,因此请注意源文件大小的内存限制。它在我的 23K 文件上工作得很好。只让它在 FTP 上工作(不是 SFTP)。

# Comments: Read JSON stream from FTP.
import json
import ftplib, StringIO

if __name__ == '__main__':
    ftpsite = 'ftp.yoursite.com'
    ftplogin = 'yourlogin'
    ftppsw = 'yourpassword'
    ftpfilename = 'yourfile.json'
    print('ftp {ftplogin}@{ftpsite}'.format(ftpsite=ftpsite,ftplogin=ftplogin))
    print('retr {ftpfilename}'.format(ftpfilename=ftpfilename))

    ftp=ftplib.FTP(ftpsite,ftplogin,ftppsw)
    r = StringIO.StringIO()
    ftp.retrbinary('retr ' + ftpfilename,r.write)
    response = r.getvalue()
    r.close()
    ftp.quit()

    parsed_json = json.loads(response)
    print parsed_json