我正试图通过用这种语言完成简单的事情来学习Python。我有一个非常简单的日志文件:
LOGON, Thu 30-01-2014, 12:38:01,11, username1, machinename
LOGOFF, Thu 30-01-2014, 12:56:41,57, username2, machinename
LOGON, Thu 30-01-2014, 13:02:37,00, username3, machinename
LOGOFF, Thu 30-01-2014, 13:02:51,48, username1, machinename
LOGON, Thu 30-01-2014, 13:15:13,91, username2, machinename
LOGOFF, Thu 30-01-2014, 14:58:31,38, username3, machinename
LOGON, Thu 30-01-2014, 15:24:24,27, username2, machinename
LOGOFF, Thu 30-01-2014, 15:48:31,87, username3, machinename
我打开文件,创建一个元组:
# Open file, put it in a tuple
v_log_filename = 'test.txt'
with open(v_log_filename) as inputFile:
t_log_lines = [tuple(line.split(',')) for line in inputFile.readlines()]
#Rearange output
for log in t_log_lines:
print log[0],log[4],log[1],log[2]
问题: 我想将log [1]和log [2]连接到合理的格式化日期和时间,然后重新创建元组。
首先尝试:
for log in t_log_lines:
t_n_log_lines = t_n_log_lines + (log[0], log[4], (str(log[1]), str(log[2])))
for log in t_n_log_lines:
print log
结果:
(' Thu 30-01-2014', ' 13:01:03')
LOGOFF
username
(' Thu 30-01-2014', ' 13:01:35')
LOGON
username
(' Thu 30-01-2014', ' 13:04:43')
LOGOFF
username
(' Thu 30-01-2014', ' 13:04:59')
我正在寻找更像是的解决方案:
('Thu 30-01-2014 13:01:03', 'LOGOFF', 'username')
答案 0 :(得分:0)
这正是您所要求的:
t_n_log_lines = []
with open(v_log_filename) as f:
for line in f:
l = map(str.strip, line.split(','))
t_n_log_lines.append((l[1] + ' ' + l[2], l[0], l[4]))
print t_n_log_lines
>>> [('Thu 30-01-2014 12:38:01', 'LOGON', 'username1'),
>>> ('Thu 30-01-2014 12:56:41', 'LOGOFF', 'username2'),
>>> ('Thu 30-01-2014 13:02:37', 'LOGON', 'username3'),
>>> ('Thu 30-01-2014 13:02:51', 'LOGOFF', 'username1'),
>>> ('Thu 30-01-2014 13:15:13', 'LOGON', 'username2'),
>>> ('Thu 30-01-2014 14:58:31', 'LOGOFF', 'username3'),
>>> ('Thu 30-01-2014 15:24:24', 'LOGON', 'username2'),
>>> ('Thu 30-01-2014 15:48:31', 'LOGOFF', 'username3')]
log[n]
条目已经是字符串,因此无需再次转换它们。如果要将它们连接在一起,请使用+
运算符。使用,
时,python会创建另一个元组,它将放在外部元组中。这就是您在输出中看到的内容。
答案 1 :(得分:0)
我不知道你是否需要这个。
a=r'''LOGON, Thu 30-01-2014, 12:38:01,11, username1, machinename
LOGOFF, Thu 30-01-2014, 12:56:41,57, username2, machinename
LOGON, Thu 30-01-2014, 13:02:37,00, username3, machinename
LOGOFF, Thu 30-01-2014, 13:02:51,48, username1, machinename
LOGON, Thu 30-01-2014, 13:15:13,91, username2, machinename
LOGOFF, Thu 30-01-2014, 14:58:31,38, username3, machinename
LOGON, Thu 30-01-2014, 15:24:24,27, username2, machinename
LOGOFF, Thu 30-01-2014, 15:48:31,87, username3, machinename'''
t_log_lines = [tuple(line.split(',')) for line in a.split('\n')]
t_n_log_lines=[]
for log in t_log_lines:
log=map(lambda x: x.strip(),log)
t_n_log_lines.append( ("%s %s"%(log[1],log[2]), log[0],log[4],) )
for log in t_n_log_lines:
print log