在Python中创建.txt文件,但我找不到保存的位置

时间:2014-11-11 19:50:04

标签: python yahoo-finance

我正在学习如何使用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'代码应该创建的文件,所以我假设文件从来没有创建过。

代码正确执行,但没有文件。

建议?

3 个答案:

答案 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)

当您退出缩进范围时,这将自动关闭文件。