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

在python中的字典中创建字典读取一些数据是一个csv文件,python,csv,dictionary,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,UNKNOW

我有一个名为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小时

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

未经检查,但应该有效。应该让你做一些类似的事情:

{1: {33: 22, 34: 25}}
1表示小时,33和34表示分钟,22和25表示值(可以是字符串或其他形式)

编辑:True,分钟数必须是数组才能在同一分钟内存储多个值,因此对分钟数也要这样做,如下所示:

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"]}}
所以输出应该是这样的:

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(',')

并将“打印”用于调试程序。

带有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:])

谢谢你的努力。我会试着给你回复。{1:{30:['UNKNOWN','UNKNOWN','UNKNOWN','UNKNOWN','UNKNOWN','10002']}上面的输出给了,00,15和45分钟没有给,但仍然给了我相同的输出,它只是创建了csv的第一条记录的散列,出于某种原因留下了其余的记录。你能用你的代码编辑我上面的代码吗?这样我就可以确保我没有犯任何错误。作为旁注,请检查模块,而不是手动解析CSV。CSV它只是我在shell环境中提供的一个扩展。它也可以是txt文件,也可以是根据您的需求编辑和优化的文件