2017-01-16 37 views
-1

我想從FTP服務器提取文本文件。這是我已經有的代碼:修復Python 3.5上的FTP網頁抓取腳本

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 

這將是一個更Python的方法呢?

+0

因爲'str'不支持緩衝接口,所以你不能'print(「\ r \ nAAAP |納斯達克的高級加速器應用程序S.A.),因爲它會引發TypeError, – 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(),你會得到一個列表,每行代表一個組件。