2

コードを実行して yahoo ファイナンスからデータを取得しようとしています。エラーは発生しませんが、コンピューターのどこにもファイルが見つかりません。誰でも助けることができますか?

ありがとう、ジョシュ

これは私が今使っているもので、たくさんの 'oh no's を得ています。数字の 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)

修正しました。助けてくれたみんなに感謝します。

4

5 に答える 5

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)でした。

これが私のために働いたコードです。これは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)
于 2013-09-04T04:43:25.730 に答える
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.
于 2013-09-04T04:48:12.387 に答える
0

you can use find command to find the file that you have created:

sudo find / 'GOOG.txt'  

However, remember to add the absolute path to your python file path. In this case:

fileLine = '/home/...'+ stock+'.txt'   # /home/... could be your home folder

(Note, if you are using IDE like eclipse, you might find those files in your project folder)

于 2013-09-04T04:32:46.650 に答える
0

それが文字列であることを確認したと思いstockます。プログラムが期待どおりに実行される場合、ファイルはプログラムと同じディレクトリに保存されます。

期待どおりに実行されない場合は、ファイルを 、try:次にfor、および 2 つifの の下に作成していることに気付くことから始めることができます。これらの行のいずれかが期待どおりに機能しない場合 (たとえばsourceCode、計画どおりに分割されない、またはif条件が満たされない)、ファイルは作成されないため、検索する必要はありません。最初に、これらの行が希望どおりに機能するかどうかをテストします。

また、次のインデントを見逃したようif len(splitLine) == 6:です ?

于 2013-09-04T04:21:01.993 に答える