2016-10-06 80 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)