簡體   English   中英

在python的字典中創建字典,讀取一些數據是csv文件

[英]creating dictionary within a dictionary in python reading some data is a csv file

我有一個名為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循環內)

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

並放置“打印”來調試程序。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM