如何计算制表符分隔文件中每列中的元素总数

时间:2013-04-10 19:05:06

标签: python

给定制表符分隔文件,如何计算每列中元素的总数?我的文件大小约为6GB。

column  count   min max sum mean
80  29573061    2   40  855179253   28.92
81  28861459    2   40  802912711   27.82
82                  40  778234605   27.63
83  27479902    2   40              27.44
84  26800815        40  729443846   27.22
85  26127825    2       701704155   26.86

输出:

`column` has  6 items in it
`count` has 5 items in it
 and so on

4 个答案:

答案 0 :(得分:2)

如下:

import csv
from collections import Counter

counts = Counter()
with open("count.tsv", "rb") as fp:
    reader = csv.DictReader(fp, delimiter="\t")
    for row in reader:
        counts += Counter(k for k,v in row.items() if v.strip())

给出了

>>> counts
Counter({'column': 6, 'mean': 6, 'count': 5, 'max': 5, 'sum': 5, 'min': 4})

尽管如@Cartroo所述,您可能需要根据您想要考虑的空值来更改空白标准。

答案 1 :(得分:0)

假设您的意思是计算非空白文本的出现次数,如下所示:

import collections

titles = None
counts = collections.defaultdict(int)
with open("file.txt") as fd:
    for line in fd:
        items = line.split("\t")
        if titles is None:
            if items:
                titles = [i.strip() for i in items]
            continue
        for i in xrange(min(len(titles), len(items))):
            if items[i].strip():
                counts[titles[i]] += 1

for column, count in counts.iteritems():
    print "Column %s has %d items" % (column, count)

请注意,此代码不依赖于具有比标题行更多元素的行,尽管它确实处理较短的行。我确信有更简洁的方法使用列表推导等,但我认为更冗长的风格可能更清晰。

如果你的意思是对值本身或类似的求和,你需要用items列表做一些更聪明的事情。仅作为示例,找到“计数”列的总和:

total_count = 0
with open("file.txt") as fd:
    for line in fd
        items = line.split("\t")
        try:
            total_count += int(items[1])
        except ValueError:
            pass

我不太确定你要做什么,但希望这些例子可以让你了解如何以简单的方式进行这种处理。

答案 2 :(得分:0)

我会做这样的事情:

  1. 逐行阅读文件
  2. Split每行由制表符分隔符('\ t')组成
    • 对于每个拆分,迭代列表中的每个元素
      • 检查空字符串值
        • 如果有空字符串,请不要执行任何操作
        • 如果没有空字符串,请增加该列的计数
  3. 对于列数,您可以使用其他列表。例如,count是我们的列表,count [0]将是列“column”的元素数,count [1]将是“count”列的元素数等。

答案 3 :(得分:0)

Map reduce库是为这种大数据处理而制作的。使用它是个好主意。 https://developers.google.com/appengine/docs/python/dataprocessing/overview#Downloading_the_Mapreduce_Library