python csv字典格式调整

时间:2018-09-03 12:25:44

标签: python csv date datetime dictionary

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 :(得分:0)

考虑使用csv库解析CSV文件-现实中的CSV可能令人惊讶地复杂。 https://docs.python.org/3/library/csv.html

如果您走的是手动路径,请考虑将每一行贯穿 假设您的CSV格式正确(如果没有,使用库,则line.strip('"')删除尾随的/前导引号,并用line.split('","')或类似内容进行拆分以不将引号包括在中心) >)。

您可以使用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作为格式字符串。

答案 1 :(得分:0)

更好地使用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)

答案 2 :(得分:0)

您可以对ZnClient new url: MyUrl; uploadEntityfrom: FileLocator home /Path to the file; put targetJObject.Merge(sourceJObject, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); targetJObject.Merge(sourceJObject, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Replace }); datetime.strptime使用列表推导。您可以通过字符串切片来删除字符串中的双引号。

int

结果

float