2015-05-17 40 views
1

我在txt文件的每一行中都有一些值。現在我想計算在txt文件中的兩個值之間的區別python

線之間的差[1] - 線[0],線路[3] - 線[2]

等等。

import sys 

l = [] 
i = 0 
f=open('Isotop1.txt') 
# i = Zeilennummer, line = text der Zeile 
for line in enumerate(f): 
    l.append(line) 
    for i in l: 
     c = l[i] - l[i-1] 
     print c 


f.close() 

稍後我想將解決方案存儲在新的文本文件中。 但現在我得到list indices must be integers, not tuple錯誤。 有人可以幫忙嗎?

這是一個來自文本文件的小例子。我想計算33和0,94和61之間的差異,等等。也許我用completey錯誤的方法解決這個問題...

0 
 
33 
 
61 
 
94 
 
122 
 
153 
 
178 
 
200 
 
227 
 
246 
 
274 
 
297 
 
310 
 
324

+2

添加一些輸入和預期的輸出,有無數的問題在你的代碼 –

+0

枚舉返回'tuple'。這是第一個錯誤的來源。那之後還有很多。我們可以看到「Isotop1.txt」的樣子嗎? –

+0

我編輯我的第一篇文章 –

回答

2
with open("in.txt") as f: 
    # get first line/number 
    nxt = int(next(f)) 
    for n in f: 
     print("absolute difference between {} and {} = {}" 
       .format(n.rstrip(), nxt, abs(int(nxt) - int(n)))) 
     # set nxt equal to the next number 
     nxt = int(next(f,0)) 

輸出:

absolute difference between 33 and 0 = 33 
absolute difference between 94 and 61 = 33 
absolute difference between 153 and 122 = 31 
absolute difference between 200 and 178 = 22 
absolute difference between 246 and 227 = 19 
absolute difference between 297 and 274 = 23 
absolute difference between 324 and 310 = 14 

如果你要使用的每個數字:

def diff(fle): 
    with open(fle) as f: 
     nxt = int(next(f)) 
     for n in f: 
      yield abs(int(nxt) - int(n)) 
      nxt = int(next(f,0)) 

print(list(diff("in.txt"))) 
[33, 33, 31, 22, 19, 23, 14] 

還是迭代,每次得到一個數字:

for n in diff("words.txt"): 
    print(n) 

輸出:

33 
33 
31 
22 
19 
23 
14 

使用0作爲默認值next將避免StopIterationError。

如果你正在做大量的數值計算numpy的的可能會更好:

import numpy as np 

arr = np.loadtxt("words.txt", dtype=np.int) 

diff = np.abs(np.diff(arr.reshape(-1,2)).flatten()) 

print(diff) 
+0

非常感謝!這個伎倆! –