0

嗨,假设我有一个这样的制表符分隔文件(每个字段由制表符空格分隔):

Name    ID    Country    GPA
Tom    id1    USA        3.4
Jon    id2    Canada    
Amy           UK         3.0
Kevin  id4    Scotland    
Kris                     3.1

这里 name = 1.0 的密度是 100% ID 的密度是 0.6 是 60%(缺少 2 个字段) Country 的密度是 0.8 GPA 的密度也是 0.6

如何使用python为文件找到这个?此外,我需要一个高效且快速的算法,因为我需要对价值超过 40 GB 的数千个文件执行此操作。Map reduce 代码也有效。
提前致谢 :)

4

2 回答 2

1
from collections import Counter
from itertools import izip
import csv

with open(filename, 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    keys = next(reader)
    counts = Counter()
    for i, row in enumerate(reader):
        counts.update(k for k, v in izip(keys, row) if v)
    line_count = i + 1
    for k in keys:
        print k, 'density:', 1.0 * counts[k] / line_count
于 2012-09-04T22:07:37.773 回答
0
f = open(name,'r')
head = f.readline().strip().split('\t')
num = 0
has = [0]*len(head)
for line in f:
    num += 1
    for (i,x) in enumerate(line.strip().split('\t')):
        if x:
            has[i] += 1

print head
print [float(x)/num for x in has]
于 2012-09-04T22:09:00.707 回答