如何基于月/年生成多个txt文件?

时间:2018-01-23 03:10:07

标签: python

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

我想将文件按mm / yy拆分为多个txt并排序

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

分割
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

1 个答案:

答案 0 :(得分:0)

你可以使用正则表达式(例如[0-9] {4}([01] \ d | 2 [0123]):( [012345] \ d):( [012345] \ d))但是在发布的示例日期始终在字符串的开头。如果是这种情况,您可以使用字符串的位置来解析日期。

    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(),因此您可以使用简单的相等来检查两个日期是否在同一个月和/或年份。