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

2024-05-29 08:27:46 发布

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

我有这样一个.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等开头的行,并需要这样的最终文件:

^{pr2}$

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


Tags: 文件数据代码格式dat新手格式文件abaqus
2条回答

解释-首先我们将文件分成几行,然后在空白处拆分行。在

然后我们使用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

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])))

它将生成如下输出文件:

^{pr2}$

使用Python2.7进行测试

相关问题 更多 >

    热门问题