以csv格式从yahoo获取股票数据的未知字符

2024-03-28 08:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试用python从yahoo finance获取历史股票数据时,我得到了正确的html输出,但在csv中,它返回未知字符

csv输出:

摁彪汣獯ⱥ汃獯ⱥ慄整䠬杩ⱨ潌ⱷ灏湥匬浹潢ⱬ潖畬敭㈊㄰ⴴ㐰㈭ⰵ䡙住ㄬ㐹㄰〶ⰰ㐳㐮ⰸ㔳〮㤹㤹ⰸ㐳㈮〹〰ⰱ㐳㐮ⰸ㔳〮㤲㤹ⰹ

这是我的密码:

 def run():
   yahoo=Share('YHOO')
   file1=open("scripts/hisdata.csv","w")
   file1.write("Adj_close,Close,Date,High,Low,Open,Symbol,Volume\n")
   h= yahoo.get_historical('2014-04-25', '2014-04-29')
   h=h[0]
   a=h.values()
   a=','.join(a)
   a=a.split(',')
   vol=a[0]
   sym=a[1]
   adjcls=a[2]
   high=a[3]
   low = a[4]
   date = a[5]
   close = a[6]
   opn = a[7]
   file1.write(date+",")
   file1.write(sym+",")
   file1.write(vol+",")
   file1.write(adjcls+",")
   file1.write(high+",")
   file1.write(low+",")
   file1.write(close+",")
   file1.write(opn+",")
   print vol
   print date

   return (vol,adjcls,high,low,close,opn)

Tags: csvclosedate历史file1yahoowritelow
1条回答
网友
1楼 · 发布于 2024-03-28 08:27:21

您可以尝试以下方法,使用Python的^{}模块自动为输出创建正确的格式:

from yahoo_finance import Share
import csv

def run():
    yahoo = Share('YHOO')

    with open("scripts/hisdata.csv", 'wb') as file1:
        csv_output = csv.writer(file1)

        # First write the header row
        heading = ['Adj_Close', 'Close', 'Date', 'High', 'Low', 'Open', 'Symbol', 'Volume']
        csv_output.writerow(heading)

        h = yahoo.get_historical('2014-04-25', '2014-04-29')[0]
        csv_output.writerow([h[value] for value in heading])

        print h['Volume']
        print h['Date']

        return ([h[value] for value in ['Volume', 'Adj_Close', 'High', 'Low', 'Open']])

print run()

yahoo_finance模块将每个条目作为字典返回,因此按名称提取每个条目比列出值更简单、更安全。你知道吗

对我来说,这会创建一个output.csv文件,其中包含以下内容:

Adj_Close,Close,Date,High,Low,Open,Symbol,Volume
35.830002,35.830002,2014-04-29,35.889999,34.119999,34.369999,YHOO,28736000

并显示以下输出:

28736000
2014-04-29
['28736000', '35.830002', '35.889999', '34.119999', '34.369999']

您看到的数据可能是由于您用于查看文件的方法造成的,它似乎解码不正确。文件应以字节形式打开,例如ASCII。您应该尝试将其加载到电子表格应用程序中,例如Excel。你知道吗

对于LibreOffice Calc,请尝试以下操作:

LibraOffice import dialog

要将所有返回的行数据写入csv文件,可以使用以下脚本:

from yahoo_finance import Share
import csv

def run():
    yahoo = Share('YHOO')

    with open('scripts/hisdata.csv', 'wb') as file1:
        csv_output = csv.writer(file1)
        heading = ['Adj_Close', 'Close', 'Date', 'High', 'Low', 'Open', 'Symbol', 'Volume']
        csv_output.writerow(heading)

        for row in yahoo.get_historical('2014-04-25', '2014-04-29'):
            csv_output.writerow([row[value] for value in heading])

run()

相关问题 更多 >