如何使用python合并.dat文件中的行

时间:2015-08-09 05:31:35

标签: python csv

我有.dat格式的数据

1 13 0.54 

1 15 0.65

1 67 0.55

2 355 0.54

2 456 0.29

3 432 0.55

3 542 0.333

我想合并以1,2开头的行,依此类推,想要一个像这样的最终文件:

1 13 0.54 15 0.65 67 0.55

2 355 0.54 456 0.29

3 432 0.55 542 0.333

有人可以帮帮我吗?我是Python的新手。除非我得到这个格式文件,否则我无法运行我的abaqus代码。

2 个答案:

答案 0 :(得分:0)

解释 - 首先我们将文件拆分成行,然后我们将这些行拆分为空格。

然后我们使用itertools.groupby按照第一个元素对行进行分组。

然后我们取值,忽略第一个元素并连接空格,并在前面加上我们分组的键和一个空格。

from itertools import groupby
with open("file.dat") as f:
    lines = [line.split() for line in f.readlines()]
    filteredlines = [line for line in lines if len(line)]
    for k, v in groupby(filteredlines, lambda x: x[0]):
        print k + " " + " ".join([" ".join(velem[1:]) for velem in v])
        print

答案 1 :(得分:0)

Python CSV库既可用于读取DAT文件,也可用于创建CSV文件,如下所示:

import csv, itertools

with open("input.dat", "r") as f_input, open("output.csv", "wb") as f_output:
    csv_input = csv.reader(f_input, delimiter=" ", skipinitialspace=True)
    csv_output = csv.writer(f_output, delimiter=" ")
    dat = [line for line in csv_input if len(line)]

    for k, g in itertools.groupby(dat, lambda x: x[0]):
        csv_output.writerow([k] + list(itertools.chain.from_iterable([value[1:] for value in g])))

它生成一个输出文件,如下所示:

1 13 0.54 15 0.65 67 0.55
2 355 0.54 456 0.29
3 432 0.55 542 0.333

使用Python 2.7进行测试