2017-10-19 77 views
2

我有一個* .dat文件。我知道我想分割文件的位置。他們是分割* .dat文件具有固定寬度,每個寬度已知

[5,5,10,10,10,10,10,5,5,10] 

然而,read_fwf取值爲格式大熊貓:

[(0, 5), (5, 10), (10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 65), (65, 70), (70, 80)] 

如何轉換上述數值爲以下值?

回答

2

read_fwfcolspecs參數使用半開區間,所以實際上它預計

[(0, 5), (5, 10), (10, 20), …] 

如果您累積添加寬度,你得到你的開始(和結束)指數:

widths = [5,5,10,10,10,10,10,5,5,10] 
borders = np.cumsum([0] + widths) 
>>> array([ 0, 5, 10, 20, 30, 40, 50, 60, 65, 70, 80]) 

然後用zip的上端和下端:

list(zip(borders[:-1], borders[1:])) 
>>> [(0, 5), (5, 10), (10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 65), (65, 70), (70, 80)] 
4

我會用numpy的cumsum:

In [11]: c = np.cumsum([5,5,10,10,10,10,10,5,5,10]) 

In [12]: s = np.insert(c + 1, 0, 0) 

In [13]: list(zip(s, c)) 
Out[13]: 
[(0, 5), 
(6, 10), 
(11, 20), 
(21, 30), 
(31, 40), 
(41, 50), 
(51, 60), 
(61, 65), 
(66, 70), 
(71, 80)] 

編輯

s = np.insert(c, 0, 0) 
list(zip(s,c)) 

[(0, 5),(5, 10),(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 65), (65, 70), (70, 80)] 
+0

對不起,我的問題是錯誤的,我不知道read_fwf閱讀一種不同的格式。我糾正了這個問題。 – pnkjmndhl

+2

@pnkjmndhl然後而不是'c + 1'只使用'c' – Dark