我有一个名为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个小时。
答案 0 :(得分:0)
在插入新值之前检查键是否存在(这将在你的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(',')
并将' print'调试程序。
答案 1 :(得分:0)
使用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:])