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

2024-04-23 16:32:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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:]

这里我得到了hour,minute和剩余的字段,但是在创建所需的输出时有点困难,它将hour作为主键,minute作为子键,相应的字段作为值,以此类推,在该小时的每分钟,即'00'、'15'、'30'和'45',以及每小时。目前只有1小时在这个csv文件,在未来可以有超过1小时。你知道吗


Tags: 文件csvinforfilesglobunknownlines
2条回答

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

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

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

没有检查,但应该工作。应该让你这样做:

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

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

EDIT:True,minutes必须是数组才能在同一分钟内存储多个值,因此对minutes执行相同的操作,如下所示:

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"]}}

编辑二:最终代码为:

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

把打印出来调试程序。你知道吗

相关问题 更多 >