从CSV获取出现的次数

2024-09-29 22:01:23 发布

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

输出目标

Apache 2.0.44 (Linux) - 2
Cisco IOS - 4
Linux Kernel 2.4.20 - 1
Microsoft IIS 5.0 < 5.1 - 2

电流输出m组(1):

^{pr2}$

我有一个CSV文件,我成功地从第3列(称为title)获取输出并从中删除一些不需要的内容(我只想从那一行中删除内容,并希望删除“-”后面的所有内容)

import sys, csv, operator, re

reader = csv.reader(open("test.csv"), delimiter=",")
sortedlist = sorted(reader, key=operator.itemgetter(2), reverse=False)
for id, path, title, date, author, platform, type, port in sortedlist:
     m = re.search(r'^(.*?)\-.*', title)
     if m:
        print m.group(1)

现在我需要m.group(1)的内容来删除重复,但要显示重复出现的次数。使用Counter计算每个项目的每一个字母……我不知所措。


Tags: csvre内容目标titlelinuxapachegroup
3条回答

我的答案与@Raymond Hettinger的答案非常相似(他在发布答案时击败了我),但我还修改了regex并进行了其他一些修改:

from collections import Counter
import csv
import operator
import re
import sys

counter = Counter()
with open("occurrences.csv", 'rb') as csvfile:
    data = [row for row in csv.reader(csvfile, delimiter=",")]
    for id, path, title, date, author, platform, type, port in data:
        m = re.search(r'^(.*?)\s*\-.*', title)
        title = m.group(1) if m else title
        counter.update([title])

for title, count in sorted(counter.items()):
    print('{} - {}'.format(title, count))

不要打印m.group(1),而是将其附加到结果列表中。然后对该列表使用Counter。在

import sys, csv, operator, re, collections

result = collections.Counter()
reader = csv.reader(open("test.csv"), delimiter=",")
sortedlist = sorted(reader, key=operator.itemgetter(2), reverse=False)
for id, path, title, date, author, platform, type, port in sortedlist:
     m = re.search(r'^(.*?)\-.*', title)
     if m:
        result[m.group(1)] += 1

for group, count in results.items():
    print('{} - {}'.format(group, count))

相关问题 更多 >

    热门问题