Python:按日期读取文本文件,组条目并计算它们

时间:2018-03-31 00:37:42

标签: python date group-by count

我有一个包含大量行的文本文件,每行都有一个日期。 所以我试图获取每个日期的条目并对它们进行计数(或对它们求和)并给出输出"日期有X个条目。" 我是在特定日期做到的。我可以将日期提供给变量"搜索",但我希望每天都能获得它而不需要每天更改它。

注意:日期始终采用格式" dd.mm.yy"。

27.03.18 Entry 1
27.03.18 Entry 2
27.03.18 Entry 3
27.03.18 Entry 4
28.03.18 Entry 1
28.03.18 Entry 2
29.03.18 Entry 1
29.03.18 Entry 2
29.03.18 Entry 3

输出将是:

  • 27.03.18:4
  • 28.03.18:2
  • 29.03.18:3

继承我的代码:

with open('file.txt', 'r', encoding='utf-8') as f:
    numLines = 0
    for line in f:
        search="29.03.18"
        if search in line:
            numLines += 1
print("search, ": " ,numLines)

4 个答案:

答案 0 :(得分:1)

import collections
with open('file.txt', 'r', encoding='utf-8') as f:
    cnt = collections.Counter()
    for line in f:
        cnt[line.split(' ')[0]] += 1
    print(cnt)

输出: 反击({'27.03.18':4,'29。03.18':3,'28 .03.18':2})

答案 1 :(得分:0)

您可以使用Counter来执行此操作,例如:

代码:

counts = Counter(datum.split(' ', 2)[0] for datum in data)

测试代码:

data = [x.strip() for x in """
    27.03.18 Entry 1
    27.03.18 Entry 2
    27.03.18 Entry 3
    27.03.18 Entry 4
    28.03.18 Entry 1
    28.03.18 Entry 2
    29.03.18 Entry 1
    29.03.18 Entry 2
    29.03.18 Entry 3
""".split('\n')[1:-1]]

from collections import Counter
counts = Counter(datum.split(' ', 2)[0] for datum in data)
print(counts)

结果:

Counter({u'27.03.18': 4, u'29.03.18': 3, u'28.03.18': 2})

答案 2 :(得分:0)

只需使用行的前8个字符(日期)作为存储在字典中的键,并在遇到相同日期时递增。

with open('file.txt', 'r', encoding='utf-8') as f:
    counts = {}
    for line in f:
        # the setdefault will initialize the key; you could also use defaultdict to make it even nicer
        counts[line[:8]] = counts.setdefault(line[:8], 0) + 1
    print(counts)

答案 3 :(得分:0)

您也可以使用pandas

import pandas as pd

data = pd.read_csv('file.txt', sep=" ", header=None)
data.columns = ["date", "entry", "count"]

print(data.groupby(['date']).agg('count')[['count']])