Список данных о запасах по неделям и дням с использованием Python
Я хотел бы перечислить различные данные о запасах, которые были опубликованы в течение одной недели. Все данные о запасах должны быть в отдельных массивах. Различные элементы массива должны представлять разные дни, а сами массивы должны быть разными неделями. Так например 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 ответ
Решение
В следующем коде:
- словарь создан с ключами типа
'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'}}