2011-11-22 44 views
3

我有很多制表符分隔的数据组织成多行,应该都在两行。现在,它看起来像这样:我有一个时髦的制表符分隔的文件,我想减少时髦

Some Key Other key Foo Key Bar Key 
    0   5   18   12 

    More Key Dor key  Gee Key Francis Scott Key 
    19   14   8   0 

    Wa Key  Whis key Don Key Luh Key 
    0   2   8   16 

,我需要它看起来像这样:

Some Key Other key Foo Key Bar Key More Key Dor key  Gee Key Francis Scott Key Wa Key  Whis key Don Key Luh Key 
    0   5   18   12   19   14   8   0     0   2   8   16 

我有几百CSV文件,每个约20行,30列,所以我想尽可能地编写我的方式。我正在使用Python CSV,但我无法弄清楚如何向自己解释。

+2

我唯一的你ght是,你可能必须做两遍:一次转换为水平格式,然后第二次转到垂直(假设你不能一步完成)。分离两种逻辑可以使解决方案更易于查看。祝你好运! –

+0

@PeterRowell困难的部分是说“对于每一行新的文本,挑选它并将其移动到最上面一行的末尾” - 在我完成时拿出关于转置它的部分。 – Amanda

+0

我错过了什么,或者你可以摆脱每一个替代(〜)行结尾(即'\ n') – malangi

回答

3

这应做到:

import csv 
import sys 

keys = [] 
values = [] 

reader = csv.reader(sys.stdin, delimiter="\t") 
for row in reader: 
    keys.extend(row) 
    values.extend(next(reader)) 

    # skip empty line 
    assert next(reader, []) == [] 

writer = csv.writer(sys.stdout, delimiter="\t") 
writer.writerow(keys) 
writer.writerow(values) 

保存为thingie.py与python thingie.py < sample.csv运行(其中“sample.csv”是你的数据文件)

+0

不错!可能会有一个额外的TAB出现在那里(至少在我的测试中是这样),但除此之外非常好。 –

+0

我在测试之前清理了示例数据。这里发布的内容实际上并不是制表符分隔的,但我假设真实的数据是。 –

+0

是的,真实的数据是制表符分隔的。 – Amanda

0

你可以SSPLIT的内容你文件,以tab作为分隔符,将每个int eger元素放入一个数组中,并将每个string元素放入另一个数组中,然后将所有字符串(键)放在一行中,并用制表符分隔,一行包含所有由制表符分隔的整数。