2016-10-06 110 views
2

我試圖從txt文件創建Python 2.7中的股票代碼的數組。 TXT文件只是每行有1只股票,如:python-從txt創建數組

SRCE 
ABTX 
AMBC 
ATAX 

的代碼我使用看起來像:

FinTick= [] 

    def parseRus(): 
     try: 
     readFile=open(r'filename.txt','r').read() 
     splitFile=readFile.split('\n') 
     FinTick.append(splitFile) 
     print FinTick 



     except Exception, e: 
     print str(e) 

當我打電話「parseRus()」我得到的輸出,看起來像:

'\xff\xfeS\x00R\x00C\x00E\x00\r\x00', '\x00A\x00B\x00T\x00X\x00\r\x00', '\x00A\x00M\x00B\x00C\x00\r\x00', '\x00A\x00T\x00A\x00X\x00\r\x00' 

正確的字母存在但不是在平面文本中打印。我已經使用了其他幾個邏輯方法來填充數組,但仍然獲得相同的輸出格式。

+1

看一看['numpy.loadtxt'(HTTP:/ /docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.loadtxt.html)。這應該比普通的開放和閱讀更好。 – Ian

+0

如果從'r'filename.txt''open中刪除'r',會發生什麼? –

+0

@Chris_Rands我得到一個無效的模式或文件名錯誤。 – BCM

回答

2
>>> tickers = [] 
>>> with open("filename.txt", "r") as f: 
     for ticker in f.readlines(): 
      tickers.append(ticker.strip()) 


>>> tickers 
['SRCE', 'ABTX', 'AMBC', 'ATAX'] 

嘗試使用readlines()strip()來代替。

編輯:一些清晰度周圍f.readlines()strip()

>>> with open("filename.txt", "r") as f: 
     print(f.readlines()) 

['SRCE\n', 'ABTX\n', 'AMBC\n', 'ATAX'] 

所以,當我們通過f.readlines()返回list對象迭代,我們需要剝離換行符\n字符。使用strip()方法來執行此操作str類型。

編輯2:@Eli是對的。我們也可以使用for ticker in f而不是for ticker in f.readlines()

>>> tickers = [] 
>>> with open("filename.txt", "r") as f: 
     for ticker in f: 
      tickers.append(ticker.strip()) 

>>> tickers 
['SRCE', 'ABTX', 'AMBC', 'ATAX'] 
+2

不需要使用'readlines'。只要在f:中輸入代碼即可。沒有必要將整個文件讀入RAM中。 –

+0

我不清楚你已經解決了他們的問題,你能複製OP的當前輸出嗎? –

+0

OP的代碼實際上適用於我。我從代碼中得到了與我的代碼相同的結果。我只是想知道在他們的文本文件中是否有多餘的字符。 – blacksite

0

我終於想出了一個修復方案。

我不得不從1列1行,然後保存爲.csv修改文本文件,並修改代碼:

FinTick= [] 

def parseRus(): 
    try: 
     readFile=open(r'filename.csv','r').read() 
     splitFile=readFile.split(',') 
     for eachLine in splitFile: 
      splitLine=eachLine.split(',') 
      ticker=splitLine[0] 
      FinTick.append(ticker.strip()) 



    except Exception, e: 
    print str(e)