代码不保存文件,但没有错误

时间:2013-09-04 04:12:54

标签: python yahoo-finance

我正在尝试运行代码从雅虎财务中提取数据。我没有得到任何错误,但我无法在我的计算机上找到任何文件。有人可以帮忙吗?

谢谢, 约什

这就是我现在正在使用的,而且我得到了很多'哦不是。我尝试使用数字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)

修正了,谢谢所有帮助过的人。

5 个答案:

答案 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。如果没有,请检查您提交的文件和路径。保存之前路径必须存在。