我正在处理一个问题,我想从文本文件中提取股票名称以在多个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)
答案 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())