从txt文件中检索信息以用作python文件中的变量

时间:2016-04-13 20:21:38

标签: python string variables text extract

我正在处理一个问题,我想从文本文件中提取股票名称以在多个python脚本中使用,这样如果我添加一个或多个股票,我就不必更改所有python文件。

我的stocks.txt文件是:

AAPL
GOOG
TSLA

如果我导入此脚本,则脚本会保存A.txt,A.txt,P.txt,L.txt,G.txt等。

每个字母都是分开的。如何更改我的代码以便AAPL,GOOG和TSLA?

谢谢!

我的简化剧本:

import urllib2
import time
import datetime
import os

filePath = os.path.abspath('stocks.txt')
openFile = open(filePath, 'r')
stockToPull = str(openFile.read())

def pullData(stock):
    try:
        saveFileLine = "today_data\\" +stock+".txt"

    except Exception, e:
        print 'main loop', str(e)

while True:
    for eachStock in stockToPull:
        pullData(eachStock)

1 个答案:

答案 0 :(得分:1)

您的问题是

stockToPull = str(openFile.read())

这是将openFile的全部内容作为单个字符串。因此,当您遍历stockToPull时,您正在遍历一个字符串,这会生成一系列单个字母

改为使用

stockToPull = openFile.readlines()

file.readlines()生成文件中所有行的列表。如果文件特别大,或者您不想要中间变量,您也可以直接在文件中循环:

while True:
    for eachStock in openFile:
         pullData(eachStock)

其他一些不相关的批评:

  • 在编写代码时,while True:将创建无限循环
  • 文件中的数据通常包含额外的\n或空格字符,请考虑添加pullData(eachStock.strip())以删除这些
  • 正如评论中指出的那样,你忽略了关闭文件。您可以添加显式关闭语句或使用上下文管理器,如下所示。
  • 这可能只是因为你的精简代码,但典型的惯例是将函数定义放在任何执行的代码之前(不包括导入)
  • 这个很小,我一直把它看作except Exception as e:,这是更可读的东西
  • 使用os.path.join()创建文件路径字符串。或者,您可以使用原始字符串来防止需要\\

全部放在一起

import urllib2
import time
import datetime
import os

def pullData(stock):
    try:
        saveFileLine = os.path.join("today_data", stock+".txt")   
    except Exception as e:
        print 'main loop', str(e)

filePath = os.path.abspath('stocks.txt')
with open(filePath, 'r') as openFile:
    for eachStock in openFile:
         pullData(eachStock.strip())