Stack Overflow на русском Asked on November 26, 2020
date_list = ['20150101', '20150102', '20150103', .... '20200901', '20200902', '20200903', '20200904', '20200905']
Есть текстовой файл в котором содежриться информация вида:
...
[6246, '2015070100', 5876, '2015070200', 6365, '2015070300', 8511, '2015070400', 6232 ... 9616, '2020080300', 7960, '2020080400', 7018, '2020080500', 7500, '2020080600']
[0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', ... 0, '2020080600', 0, '2020080600', 0, '2020080600']
[9126, '2015070100', 8195, '2015070200', 8081, '2015070300', ... 11411, '2020080400', 7497, '2020080500', 7053, '2020080600']
[5597, '2015070100', 5851, '2015070200', 4890, '2015070300', 4547, ... 3695, '2020080300', 3488, '2020080400', 3930, '2020080500', 3941, '2020080600']
...
Причем это списки, записанные в текстовой файл
как прочитать так информацию из файла, так чтобы это был словарь в котором уникальное значение это "2015070100", "2015070300" и похожие (дата) а значение это числа или же значение 0?
Как сделать так чтобы, некоторые строки списков содержат меньше элементов чем может быть как date_list. Если в строке отсуствует дата, то вставить ее, а значение поставить "0"?
Порядок важен, ибо далее бы хотела бы записать информацию в csv виде, если взять за основу пример данных выше
date,Rage (video game),Yooka-Laylee,Need for Speed: Shift
2015-07-01,6246,0,9126,5597,...
2015-07-02,5876,6365,8511,6232,...
....
2020-09-05,7018,0,7497,3930...
2020-09-06,7500,0,7053,3941...
Если я правильно понял задачу то из вот таких данных в файле:
[6246, '2015070100', 5876, '2015070200', 6365, '2015070300', 8511, '2015070400', 6232 ... 9616, '2020080300', 7960, '2020080400', 7018, '2020080500', 7500, '2020080600']
[0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600', 0, '2020080600']
[9126, '2015070100', 8195, '2015070200', 8081, '2015070300', 11411, '2020080400', 7497, '2020080500', 7053, '2020080600']
[5597, '2015070100', 5851, '2015070200', 4890, '2015070300', 4547, '2020080300', 3488, '2020080400', 3930, '2020080500', 3941, '2020080600']
Должно получиться что-то такое:
import re
from datetime import datetime
import pandas as pd # pip install pandas (если не установлено)
_dict = dict()
with open('data.txt', 'r', encoding='utf-8') as data:
for line in data.readlines():
clear_line = re.sub(r'[^,d]', '', line).split(',')
for index, date_str in zip(clear_line[::2], clear_line[1::2]):
date_value = datetime.strptime(date_str, '%Y%m%d%H').date().__str__()
_dict.setdefault(date_value, [])
_dict[date_value] += [index]
max_len = max(len(_dict[val]) for val in _dict)
for key in _dict:
_dict[key].extend([0] * (max_len - len(_dict[key])))
pd.DataFrame(_dict).to_csv('test.csv', index=False, sep=';', quoting=2)
Вывода test.csv
:
"2015-07-01";"2015-07-02";"2015-07-03";"2015-07-04";"2020-08-03";"2020-08-04";"2020-08-05";"2020-08-06"
"6246";"5876";"6365";"8511";"62329616";"7960";"7018";"7500"
"9126";"8195";"8081";0;"4547";"11411";"7497";"0"
"5597";"5851";"4890";0;0;"3488";"3930";"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"0"
0;0;0;0;0;0;0;"7053"
0;0;0;0;0;0;0;"3941"
UPD
или так: (вместо pd.DataFrame(_dict).to_csv('test.csv', index=False, sep=';', quoting=2
)
for key in _dict:
print(key, *_dict[key], sep=',', file=open('test.txt', 'a', encoding='utf-8'))
# Если нужна сортировка по дате то
for key in sorted([*_dict.keys()], key=datetime.fromisoformat):
print(key, *_dict[key], sep=',', file=open('test.txt', 'a', encoding='utf-8'))
вывод test.txt
:
2015-07-01,6246,9126,5597,0,0,0,0,0,0,0
2015-07-02,5876,8195,5851,0,0,0,0,0,0,0
2015-07-03,6365,8081,4890,0,0,0,0,0,0,0
2015-07-04,8511,0,0,0,0,0,0,0,0,0
2020-08-03,62329616,4547,0,0,0,0,0,0,0,0
2020-08-04,7960,11411,3488,0,0,0,0,0,0,0
2020-08-05,7018,7497,3930,0,0,0,0,0,0,0
2020-08-06,7500,0,0,0,0,0,0,0,7053,3941
Answered by Namerek on November 26, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP