使用Python按周和天列出股票数据

-1 投票
1 回答
770 浏览
提问于 2025-04-18 14:58

我想列出一周内发布的不同股票数据。这些股票数据应该放在不同的数组里。每个数组的元素代表不同的天,而这些数组本身则代表不同的周。比如说,week_1[55.5,23.1,234.8,,23.6]。我到目前为止尝试的代码如下,但不幸的是,它根本不工作。我总是收到错误提示:'str' object does not support item assignment。有没有什么简单的方法可以解决这个问题?

Python代码:

import datetime

# open csv file
lines = open("google.csv")
lines = lines.read()
lines = lines.split("\n")

i=0
while i<(len(lines)-1):
    data = lines[i].split(',')
    date2 = data[0].split('-')

    week = date(int(date2[0]), int(date2[1]), int(date2[2])).isocalendar()[1]
    # Create week array
    weekN = "week_"+str(week)
    weekN = []
    # Get Stock Data
    stockN = data[1]

    #get day and add stock prices to week array
    d = datetime.date(int(date2[0]), int(date2[1]), int(date2[2]))
    if d.strftime("%a") == "Mon":
        weekN[0] = stockN
    if d.strftime("%a") == "Tue":
        weekN[1] = stockN
    if d.strftime("%a") == "Wed":
        weekN[2] = stockN
    if d.strftime("%a") == "Thu":
        weekN[3] = stockN
    if d.strftime("%a") == "Fri":
        weekN[4] = stockN

    i=i+1

CSV文件:

2011-02-07,610.16,618.39,609.21,614.29,1799600,614.29
2011-02-04,610.15,611.44,606.61,610.98,1550800,610.98
2011-02-03,609.48,611.45,606.13,610.15,1495100,610.15
2011-02-02,611.00,614.34,607.53,612.00,1760700,612.00
2011-02-01,604.49,613.35,603.11,611.04,2745300,611.04
2011-01-31,603.60,604.47,595.55,600.36,2804900,600.36
2011-01-28,619.07,620.36,599.76,600.99,4231100,600.99

1 个回答

0

在下面的代码中:

  • 创建了一个字典,里面的键像 'week_1' 这样的名字
  • 每个值也是一个字典
  • 使用 with 语句,逐行读取文件,利用标准库的内容来解析日期

这样我们就得到了

import datetime
import time
from collections import defaultdict
weeks = defaultdict(dict)

with open('google.csv') as f:
    for line in f:
        data = line.split(',')
        #get week
        the_date = datetime.date(*time.strptime(data[0], '%Y-%m-%d')[:3])

        _, week_number, day_number = the_date.isocalendar()
        week = "week_{}".format(week_number)
        stock = data[1]

        if day_number in range(1, 6):
            weeks[week][day_number - 1] = stock

结果是:

{'week_4': {4: '619.07'},
 'week_5': {0: '603.60', 1: '604.49', 2: '611.00', 3: '609.48', 4: '610.15'},
 'week_6': {0: '610.16'}}

撰写回答