[英]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.