#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