2015-08-09 155 views
-1

我有這樣的數據在一個.dat格式如何從.dat文件使用python

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

提示:將第一個列設置爲字典鍵。並閱讀'setdefault'或'defaultdict'文檔。 –

+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 
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測試

+0

對不起,延遲迴復。我只在週末工作。所以我沒有看到它。 –

+0

我得到這個錯誤,說沒有內置函數'len'.Could你請hrlp我 –

+0

現在試試。有一個錯字。它應該是行不是len。 –