在python中的字典中创建字典读取一些数据是一个csv文件
我有一个名为sample.csv的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
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文件,也可以是根据您的需求编辑和优化的文件