我有.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代码。
答案 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进行测试