Парсинг данных из INI файла (Python)

Коллеги, каким образом можно привести данные из текстового файла записанные следующим образом (вероятно формат *.INI file):

['2016-04-18',12],['2016-04-19',22],['2016-04-21',345],['2016-04-22',322],['2016-04-22',122] и т.д.

к нормальному *.CSV виду используя Python? Т.е. дата и величина в итоге, должны быть в разных столбцах.


Ответы (2 шт):

Автор решения: Аркадий
with open('<your_file>') as f:
    s = f.readline()
    s = s.replace('],[', '\n')
    s = s.replace('[', '')
    s = s.replace(']', '')

В файле:

['2016-04-18',12],['2016-04-19',22],['2016-04-21',345],['2016-04-22',322],['2016-04-22',122]

В результате в s:

'2016-04-18',12
'2016-04-19',22
'2016-04-21',345
'2016-04-22',322
'2016-04-22',122
→ Ссылка
Автор решения: insolor

Это не формат INI файла, это больше похоже на обычный питоновский список без начальных и конечных квадратных скобок. Соответственно, можно эти скобки добавить, и распрасить с помощью ast.literal_eval как питоновский список:

text = "['2016-04-18',12],['2016-04-19',22],['2016-04-21',345],['2016-04-22',322],['2016-04-22',122]"

import ast
from pprint import pprint

data = ast.literal_eval("[" + text + "]")
pprint(data)

Результат:

[['2016-04-18', 12],
 ['2016-04-19', 22],
 ['2016-04-21', 345],
 ['2016-04-22', 322],
 ['2016-04-22', 122]]

Если нужно сохранить в csv:

import csv

with open("result.csv", "w", newline='') as file:
    writer = csv.writer(file, delimiter=';')
    writer.writerows(data)

Если собираетесь обрабатывать эти данные с помощью pandas, то сразу преобразовывайте список с dataframe без промежуточного сохранения в csv:

df = pd.DataFrame(data, columns=["date", "number"])
# или
df = pd.DataFrame.from_records(data, columns=["date", "number"])
→ Ссылка