如何根据月/年生成多个txt文件?

2024-05-20 23:35:01 发布

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

我有一个大的txt文件(日志文件),其中每个条目都以时间戳开始,比如Sun,2013年3月17日18:58:06

我想把文件分为多个txt的mm/yy和排序

下面是我计划的通用代码,但我不知道如何实现这样的代码。我知道如何按行数等分割文件,但不按指定的时间戳

import re  
f = open("log.txt", "r")
my_regex = re.compile('regex goes here')
body = []
for line in f:
    if my_regex.match(line):
        if body:
            write_one(body)
        body = []
    body.append(line)
f.close()

txt中的行示例

2Sun, 17 Mar 2013 18:58:06 Pro  IDS2.0 10E22E37-B2A1-4D55-BE20-84661D420196 nCWgKUtjalmYx053ykGeobwgWW V3


3Sun, 17 Mar 2013 19:17:33 <AwaitingDHKey c i FPdk 1:0 pt 0 Mrse> 0000000000000000000000000000000000000000 wo>
HomeKit keychain state:HomeKit: mdat=2017-01-01 01:41:47 +0000,cdat=2017-01-01 01:41:47 +0000,acct=HEDF3,class=genp,svce=AirPort,labl=HEDF3


4Sun, 13 Apr 2014 19:10:26 values in decoded form...
oak: <C: gen:'[ 21:10 5]' ak>
      <PI@0x7fc01dc05d90: [name: Bourbon] [--SrbK-] [spid: zP8H/Rpy] [os: 15G31] [devid: 49645DA6] [serial: C17J9LGKDTY3] -



5Sun, 16 Feb 2014 18:59:41 tLastKVSKeyCleanup:
ak|nCWgKUtjalmYx053ykGeobwgWW:sk1Kv+37Clci7VwR2IGa+DNVEA: DHMessage (0x02): 112

Tags: 文件代码inretxtifmyline
1条回答
网友
1楼 · 发布于 2024-05-20 23:35:01

您可以使用regex(例如[0-9]{4}([01]\d | 2[0123]):([012345]\d):([012345]\d))但是在示例中,post日期总是在字符串的开头。如果是这样的话,您可以使用字符串的位置来解析日期。你知道吗

    import datetime 

    lines =[]
    lines.append("2Sun, 17 Mar 2013 18:58:06 Pro  IDS2.0 10E22E37-B2A1-4D55-BE20-84661D420196 nCWgKUtjalmYx053ykGeobwgWW V3")
    lines.append("3Sun, 17 Mar 2013 19:17:33 <AwaitingDHKey c i FPdk 1:0 pt 0 Mrse> 0000000000000000000000000000000000000000 wo> HomeKit keychain state:HomeKit: mdat=2017-01-01 01:41:47 +0000,cdat=2017-01-01 01:41:47 +0000,acct=HEDF3,class=genp,svce=AirPort,labl=HEDF3")
    lines.append("4Sun, 13 Apr 2014 19:10:26 values in decoded form... oak: <C: gen:'[ 21:10 5]' ak>       <PI@0x7fc01dc05d90: [name: Bourbon] [ SrbK-] [spid: zP8H/Rpy] [os: 15G31] [devid: 49645DA6] [serial: C17J9LGKDTY3] -")

    for l in lines:
        datetime_object = datetime.datetime.strptime(l[6:26], '%d %b %Y %H:%M:%S')
        print(datetime_object)

这为您提供的三个示例提供了正确的输出

2013-03-17 18:58:06
2013-03-17 19:17:33
2014-04-13 19:10:26

datetime对象具有month()year()等属性,因此可以使用简单的等式检查两个日期是否在同一个月和/或年中。你知道吗

相关问题 更多 >