Открыть файл json на FTP с помощью ftplib

#python #ftplib

#python #ftplib

Вопрос:

в нашем проекте мы должны использовать модуль ftplib. Я использую ftplib для чтения содержимого файла json на FTP, но он показывает ошибку [Errno 2] Нет такого файла или каталога: ‘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, я хочу знать, есть ли какой-либо обходной путь для открытия файла json на ftp с использованием ftplib?

Заранее спасибо, ребята

Комментарии:

1. привет, да, это должно быть в кавычках. Мой плохой

Ответ №1:

Попробуйте этот способ: сначала загрузите файл в локальный, а затем попробуйте открыть его.

 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)
  

Ответ №2:

У меня это работает на Raspberry Pi 2B. Это не затрагивает локальную файловую систему. Это Python 2.x, и я урезал его до основ. Содержимое удаленного файла копируется в локальную оперативную память, поэтому остерегайтесь ограничений памяти по размеру исходного файла. Он отлично работает с моим файлом 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