Настроить формат словаря Python CSV - PullRequest
0 голосов
/ 03 сентября 2018
import os
from datetime import datetime, date
def convert_file(file_path):
    with open(file_path) as file:
        next(file) 
        weather={}
        for line in file:
            line = line.rstrip("\n") 
            x=line.split(",")
            a=x[3]
            b=[x[-2],x[-1],x[4]]
            weather[a]=b
        print(weather)
        file.close()

file_path=os.getcwd()+"/weatherdata.csv"
convert_file(file_path)

{'"2010-07-03"': ['"68"', '"52"', '"0.00"'], '"1969-08-23"': ['"81"', '"54"', '"0.00"'], '"1983-07-10"': ['"69"', '"54"', '"0.00"'], '"1983-09-17"': ['"61"', '"49"', '"0.00"'], '"1964-04-22"': ['"50"', '"35"', '"0.33"']

Как мне сделать мой вывод похожим на приведенный ниже пример вывода ?: Выходной словарь (погода):

{datetime.date(2017, 12, 10): [49, 34, 0.0],
 datetime.date(2017, 12, 11): [49, 29, 0.0],
 datetime.date(2017, 12, 12): [46, 32, 0.0],

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Лучше использовать модуль CSV для обработки файла CSV. Но это должно помочь ...

import os
import ast
from datetime import datetime


def convert_file(file_path):
    with open(file_path) as file:
        next(file) 
        weather={}
        for line in file:
            line = line.rstrip("\n") 
            x=line.split(",")
            a=x[3]
            b=[x[-2],x[-1],x[4]]
            weather[datetime.strptime(a, '"%Y-%m-%d"')]= [ast.literal_eval(i.replace('"', "")) for i in b]
        print(weather)
        file.close()

file_path=os.getcwd()+"/weatherdata.csv"
convert_file(file_path)
0 голосов
/ 03 сентября 2018

Вы можете использовать понимание списка с datetime.strptime, int и float. Вы можете удалить двойные кавычки в ваших строках путем нарезки строк.

from datetime import datetime

d = {'"2010-07-03"': ['"68"', '"52"', '"0.00"'],
     '"1969-08-23"': ['"81"', '"54"', '"0.00"'],
     '"1983-07-10"': ['"69"', '"54"', '"0.00"'],
     '"1983-09-17"': ['"61"', '"49"', '"0.00"'],
     '"1964-04-22"': ['"50"', '"35"', '"0.33"']}

res = {datetime.strptime(k[1:-1], '%Y-%m-%d'): \
       [int(v[0][1:-1]), int(v[1][1:-1]), float(v[2][1:-1])] \
       for k, v in d.items()}

Результат

print(res)

{datetime.datetime(1964, 4, 22, 0, 0): [50, 35, 0.33],
 datetime.datetime(1969, 8, 23, 0, 0): [81, 54, 0.0],
 datetime.datetime(1983, 7, 10, 0, 0): [69, 54, 0.0],
 datetime.datetime(1983, 9, 17, 0, 0): [61, 49, 0.0],
 datetime.datetime(2010, 7, 3, 0, 0): [68, 52, 0.0]}
0 голосов
/ 03 сентября 2018

Рассмотрите возможность анализа файла CSV с использованием библиотеки csv - реальные CSV-файлы могут быть удивительно сложными. https://docs.python.org/3/library/csv.html

Если вы идете по ручному пути, рассмотрите возможность прохождения каждой строки через line.strip('"') для удаления конечных / ведущих кавычек и разделения на line.split('","') или аналогичных, чтобы не включать кавычки в центре, при условии, что ваш CSV хорошо отформатирован (если нет, используйте библиотеку ).

Вы можете преобразовать строки в числа с помощью int(x) и float(x): что-то вроде b2 = [int(b[0]), int(b[1]), float(b[2]) должно помочь.

Вы можете преобразовать текст даты в объекты даты и времени с помощью datetime.strptime(date_string, format) - см. https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior для получения дополнительной документации, но вам понадобится %Y-%m-%d в качестве строки формата, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...