在python中的字典中创建字典读取一些数据是一个csv文件

时间:2014-07-29 07:51:35

标签: python csv dictionary

我有一个名为sample.csv的csv文件,其中包含以下数据: -

2014-07-18 01:00:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10002
2014-07-18 01:00:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10003
2014-07-18 01:15:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10004
2014-07-18 01:15:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10005
2014-07-18 01:30:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10006
2014-07-18 01:30:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10007
2014-07-18 01:45:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10008
2014-07-18 01:45:00,UNKNOWN,UNKNOWN,UNKNOWN,UNKNOWN,10009

我正在尝试编写一个python脚本来读取此csv文件中的所有行,我希望它在这里读取小时“01”并将小时作为头键,然后将分钟作为子键和其余字段作为其值。

这是我的代码段: -

def connection():
        os.chdir("record_output/")
        mydict = {}
        for files in glob.glob("*.csv"):
                fo = open(files, "r")
                data = fo.readlines()
                for lines in data:
                        lines = lines.split(',')
                        dateObject = datetime.strptime(lines[0],"%Y-%m-%d %H:%M:%S")
                        hour = dateObject.hour
                        minute = dateObject.minute
                        fields = lines[1:]

在这里,我得到小时,分钟和其余的字段,但有点挣扎在创建所需的输出,即将小时作为头键,将分钟作为子键,将相应的字段作为值等等每分钟在那个小时,即'00','15','30'和'45'以及每小时。目前这个csv文件只有1个小时,将来可能会超过1个小时。

2 个答案:

答案 0 :(得分:0)

在插入新值之前检查键是否存在(这将在你的las循环中)

if not mydict.has_key(hour):
    mydict[hour] = {}
mydict[hour][minute]=fields

未经检查但应该有效。应该让你这样:

{1: {33: 22, 34: 25}}

1小时,33和34分钟和22,25值(可以是字符串或其他)

编辑:是的,分钟必须是数组,以便在同一分钟内存储多个值,所以用分钟来做同样的事情,让它这样:

if not mydict.has_key(hour):
    mydict[hour] = {}

if not mydict[hour].has_key(minute):
    # A list here, cause you don't have more keys
    mydict[hour][minute] = [] 

mydict[hour][minute].append(fields)

所以输出应该是这样的:

{1: {33: ["a value, undefinde,...", 22, "test1"], 34: [33, "test2", "test945723"]}}

编辑II:最终代码为:

def connection():
        os.chdir("record_output/")
        mydict = {}
        for files in glob.glob("*.csv"):
                fo = open(files, "r")
                data = fo.readlines()
                for lines in data:
                        lines = lines.split(',')
                        dateObject = datetime.strptime(lines[0],"%Y-%m-%d %H:%M:%S")
                        hour = dateObject.hour
                        minute = dateObject.minute
                        fields = lines[1:]

                        if not mydict.has_key(hour):
                                mydict[hour] = {}

                        if not mydict[hour].has_key(minute):
                                # A list here, cause you don't have more keys
                                mydict[hour][minute] = [] 

                        mydict[hour][minute].append(fields)

如果不能检查你的循环:

fo = open(files, "r")
  data = fo.readlines()
  for lines in data:
    print lines

尝试改变:

  for row in data:
    lines = row.split(',')

使用名为

的新字段
  for row in data:
    lines = row.split(',')

并将' print'调试程序。

答案 1 :(得分:0)

使用csv模块的解决方案

import dateutil.parser
import csv

data_dict = {}
with open('data.csv', 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        dt = dateutil.parser.parse(row[0])
        if not data_dict.get(dt.hour,''):
            data_dict[dt.hour] = {}
        if not data_dict[dt.hour].get(dt.minute,''):
            data_dict[dt.hour][dt.minute]=[]
        data_dict[dt.hour][dt.minute].append(row[1:])