Python日期时间1970-01-01 07:00:07

Python日期时间1970-01-01 07:00:07,python,datetime,Python,Datetime,我有这样的代码片段: import re from datetime import datetime as dt from pprint import pprint as pp __lin_regex = "(.*)msg='(.*)'" events = [ "type=USER_AUTH msg=audit(1565448223.294:46713): pid=4499 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:auth

我有这样的代码片段:

import re 
from datetime import datetime as dt 
from pprint import pprint as pp

__lin_regex = "(.*)msg='(.*)'"

events = [
    "type=USER_AUTH msg=audit(1565448223.294:46713): pid=4499 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication op-test acct=\"root\" exe=\"/usr/sbin/sshd\" hostname=49.88.112.75 addr=49.88.112.75 terminal=ssh res=failed'"
]

logs = {}

for event in events:
    vm_info = ['name', 'id']

    results = ''.join(list(re.match(__lin_regex, event).groups()))

    split_results = results.split(' ')

    split_results_length = len(split_results)
    for i in range(0, split_results_length-1):
        if split_results[i].find('=') == -1:
            split_results[i - 1] = split_results[i - 1] + ' ' +  split_results[i]
            split_results.remove(split_results[i])

    pid = split_results.pop(2).split('=')[1]

    if pid not in logs:
        logs[pid] = vm_info + [pid] + [item.split('=')[1] for item in split_results]
    logs[pid][4] = dt.fromtimestamp(int(float(re.findall("([0-9.]+):", logs[pid][4])[0]))).strftime("%Y-%m-%d %H:%M:%S")

pp(logs)


但是当我有大量的事件时,它们的输出1970-01-01 07:00:07,当我尝试打印1000个数据时仍然有效,但当我打印所有数据时都无效,有什么想法吗?

查看了您的代码,为了方便起见,替换/添加了以下行,这让我可以用相同的时间戳执行10000个事件,但不同的
pid

events = [
    "type=USER_AUTH msg=audit(1565448223.294:46713): pid=4499 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication op-test acct=\"root\" exe=\"/usr/sbin/sshd\" hostname=49.88.112.75 addr=49.88.112.75 terminal=ssh res=failed'"
] * 10000

for i, event in enumerate(events):
    events[i] = event.replace("pid=4499", "pid="+str(4499+i))
所有10000个事件的日期字符串输出都是正确的,因此我认为问题可能与(a)您的正则表达式或(b)您的输入数据有关

如果我是你,我调试它的方法就是使用,并查找你看到的示例输出,例如:

import pdb

... rest of your code ...

    logs[pid][4] = dt.fromtimestamp(int(float(re.findall("([0-9.]+):", logs[pid][4])[0]))).strftime("%Y-%m-%d %H:%M:%S")
    if logs[pid][4] == "1970-01-01 07:00:07":
        pdb.set_trace()
此时,在交互式调试器中,您可以查看所涉及的变量&查看导致问题的输入
事件
字符串是什么(很可能,数据的格式没有您预期的那样好)。如果不明显,您可以通过使用
n
&检查变量分配来单步检查代码,从而判断发生了什么


您可以使用
!进口代码;code.interact(local=vars())
在调试器中,如果由于调试器命令而导致名称冲突,则可以将局部变量放入普通python shell中。

发布不起作用的代码,以及您希望它做的事情不起作用,我们不知道这意味着什么。向我们展示一些实际的代码,并解释结果如何不是您想要的,也许我们可以提供帮助。问题更新