2017-01-16 11 views
-1

Я хочу извлечь текстовый файл с FTP-сервера. Это код, который у меня уже есть:Исправление скрипта веб-скина FTP на Python 3.5

from ftplib import FTP 
import re 

def my_function(data): 
    print(data) 

ftp = FTP('ftp.nasdaqtrader.com') 
ftp.login() 
nasdaq=ftp.retrbinary('RETR /SymbolDirectory/nasdaqlisted.txt', my_function) 
#nasdaq contains the text file 

У меня было несколько проблем с этим подходом. Например, каждый раз, когда я запускаю скрипт, все распечатывается, чего я действительно не хочу, мне просто нужно, чтобы переменная «nasdaq» хранилась в виде строки. Кроме того, даже если «НАСДАК» печатает строки:

b'Symbol|Security Name|Market Category|Test Issue|Financial Status|Round Lot Size|ETF|NextShares\r\nAAAP|Advanced Accelerator Applications S.A. - American Depositary Shares 

Я не могу доказать, что это будет в «НАСДАК»:

print ("\r\nAAAP|Advanced Accelerator Applications S.A." in nasdaq) 
Out: False 

Что бы более вещий подход?

+0

Вы не можете напечатать («\ r \ nAAAP | Advanced Accelerator Applications S.A.» в nasdaq), потому что это приведет к повышению TypeError, потому что «str» не поддерживает интерфейс буфера ' – Juggernaut

ответ

1

Это по существу дубликат Is it possible to read FTP files without writing them using Python?, но я хотел показать, как его реализовать специально для вашего случая.

from ftplib import FTP 
from io import BytesIO 

data = BytesIO() 
with FTP("ftp.nasdaqtrader.com") as ftp: # use context manager to avoid 
    ftp.login()       # leaving connection open by mistake 
    ftp.retrbinary("RETR /SymbolDirectory/nasdaqlisted.txt", data.write) 
data.seek(0) # need to go back to the beginning to get content 
nasdaq = data.read().decode() # convert bytes back to string 

nasdaq должен теперь быть строкой, содержащей содержимое указанного файла, с \r\n окончаний строки Windows, стиль. Если вы укажете .split() на эти два символа, вы получите список с каждой строкой в ​​качестве компонента.