我正在尝试运行代码从雅虎财务中提取数据。我没有得到任何错误,但我无法在我的计算机上找到任何文件。有人可以帮忙吗?
谢谢, 约什
这就是我现在正在使用的,而且我得到了很多'哦不是。我尝试使用数字5和数字6.仍然没有:
import urllib2
import time
stockstoPull = 'CJES','BP','MSFT','TSLA','GOOG'
def pullData(stock):
fileLine = '/Users/Josh/Documents/Python'+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.split(',')
if len(splitLine) == 5:
if 'values' not in eachLine:
saveFile = open(fileLine,'a')
linetoWrite = eachLine+'\n'
saveFile.write(linetoWrite)
else:
print('oh no')
print('Pulled', stock)
print('...')
time.sleep(.5)
for eachStock in stockstoPull:
pullData(eachStock)
修正了,谢谢所有帮助过的人。
答案 0 :(得分:1)
我在你的代码中发现了一个错误。我相信if len(splitLine) == 6:
应为if len(splitLine) == 5:
例如,如果你去: http://chartapi.finance.yahoo.com/instrument/1.0/CJES/chartdata;type=quote;range=1y/csv
并阅读您尝试拆分的第一行: 20120904,19.2400,20.3900,19.1200,20.1500,901600
它实际上使用分隔符'。'分成5个元素列表。 20120904,19 2400,20 3900,19 1200,20 1500,901600
我将您的代码修改为在Python 3.3.2中运行,这对我有用并成功提取了所有库存数据。在我更改为if len(splitLine) == 5:
之前,您的代码未输入第一个if
语句,因为len(splitLine)
从未出现过6. {/ p>
这是适合我的代码。请注意,这是Python 3.3,因此我必须更改一些内容以使其工作,但它应该适用于您使用相同的逻辑,只需更改len(splitLine)
。
import urllib.request
import time
stockstoPull = 'CJES','BP','MSFT','TSLA','GOOG'
def pullData(stock):
fileLine = stock+'.txt'
urltovisit ='http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'
with urllib.request.urlopen(urltovisit) as f:
sourceCode = f.read(100000).decode('utf-8')
splitSource = sourceCode.split('\n')
for eachLine in splitSource:
splitLine = eachLine.split('.')
if len(splitLine) == 5:
if 'values' not in eachLine:
saveFile = open(fileLine,'a')
linetoWrite = eachLine+'\n'
saveFile.write(linetoWrite)
else:
print('oh no')
print('Pulled', stock)
print('...')
time.sleep(.5)
for eachStock in stockstoPull:
pullData(eachStock)
答案 1 :(得分:0)
我猜你确保stock
是一个字符串。如果程序按预期运行,则文件应保存在与程序相同的目录中。
如果没有按预期运行,您可以首先注意到您在try:
下创建了文件,然后是for
,然后是if
。如果这些行中的任何一行不能按预期工作(例如sourceCode
未按计划拆分,或者未满足if
条件),则不会创建该文件,因此不要使用为了它。首先测试这些行是否按您的需要工作。
此外,您似乎错过了if len(splitLine) == 6:
之后的缩进?
答案 2 :(得分:0)
您可以使用find命令查找您创建的文件:
sudo find / 'GOOG.txt'
但是,请记住添加python文件路径的绝对路径。 在这种情况下:
fileLine = '/home/...'+ stock+'.txt' # /home/... could be your home folder
(注意,如果您使用的是像eclipse这样的IDE,您可能会在项目文件夹中找到这些文件)
答案 3 :(得分:0)
In your data len(splitline) at most 5, So your if condition is false every time.
if len(splitLine) == 6:
if 'values' not in eachLine:
saveFile = open(fileLine,'w')
linetoWrite = eachLine+'\n'
saveFile.write(linetoWrite)
so this line never executed and your file was not saved as
saveFile.write(linetoWrite) statement is inside the if condition.
答案 4 :(得分:0)
如果您的文件名不正确,例如错误拼写或误导,则不会保存文件或显示错误。您可以通过在shell中使用命令保存它来检查它,如果它有效,它将返回True。如果没有,请检查您提交的文件和路径。保存之前路径必须存在。