我正在学习如何使用Python和SublimeText从雅虎提取财务数据。在观看了教程视频后,我想出了这个代码,以便从雅虎获取AAPL的1年数据范围。
import urllib2
import time
stockToPull = 'AAPL'
def pullData(stock):
try:
fileLine = stock+'.txt'
urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'
sourceCode = urllib2.urlopen(urlToVisit).read()
splitSource = sourceCode.split('\n')
for eachLine in splitSource:
splitLine = eachLine
if len(splitLine) == 6:
if 'value' not in eachLine:
saveFile = open(fileLine,'a')
lineToWrite = eachLine+'\n'
saveFile.write(lineToWrite)
print 'Pulled',stock
print 'sleeping'
time.sleep(5)
except Exception,e:print 'main loop', str(e)
pullData(stockToPull)
我似乎无法找到' AAPL.txt'代码应该创建的文件,所以我假设文件从来没有创建过。
代码正确执行,但没有文件。
建议?
答案 0 :(得分:1)
Python的open
是封面下的C fopen
,它与当前工作目录相关:运行程序时的当前目录。
为了说明您可以尝试:
echo "open('touched.file','w').close()" >/tmp/touch.py
,然后cd
到任意位置并运行python /tmp/touch.py
并看到touched.file
已创建...如果您有权这样做。
我的猜测是您的工作目录存在某种权限问题。
答案 1 :(得分:1)
我想len(splitLine) == 6
永远不会这样。您没有任何分割线的命令,splitLine
变量指向与eachLine
变量相同的内容。因此len(splitLine)
将为您提供行中的字符数,而不是列表中的元素数(假设这是splitLine
的意思)。
要尝试两件事:
添加打印功能print len(splitLine)
以了解具体方法
很久你的脚本认为线条是。如果长度从不是6那么
脚本永远不会写任何东西。
尝试在if
条件之外的文件中写入内容(例如标题)。
答案 2 :(得分:0)
尝试:
import os
print os.getcwd()
代码中的某处。这将打印您当前的工作目录,然后您可以使用文件浏览器导航到该目录。这取决于您运行脚本的位置。
您还应尝试将文件打开为:
with open(filename, 'r') as f:
# conditional to determine what data to write
f.write(data)
当您退出缩进范围时,这将自动关闭文件。