2013-03-13 128 views
2

我想採取一個大的文件,這樣在Python 2.7:在列表Python中減去整數返回一個值

123 456 GTHGGGTH 
223 567 FGRTHSYS 
12933 4656832 GJWSOOOSKKSSJ 
..... 

,我想通過行的文件行閱讀,忽略第三個元素,並用第一個元素減去每一行中的第二個元素。因此,1號線之上將返回333

我有這個到目前爲止已經試過:

def deleteLast(list):  
    NewL = list.pop()   
    return NewL 

f = open(file_name, 'r') 
line = f.readline() 
while line: 
    L = line.split() 
    L2 = deleteLast(L) 
    L3 = [int(number) for number in L2] 
    Length = L3[1]-L3[0] 
    print Length 
f.close() 

但是,當我嘗試這個編譯器說:

ValueError: invalid literal for int() with base 10: 'T' 

所有幫助表示讚賞。

+2

爲什麼這會降低投票率?它清晰,簡明,準確地描述了問題以及所嘗試的內容。 – wim 2013-03-13 02:43:05

回答

1

你可以嘗試這樣的事情:

In [8]: with open("abc") as f:  #always use with statement when handling files 
    ...:  for line in f: 
    ...:   x,y=map(int,line.split()[:2]) 
    ...:   print y-x 
    ...:   
333 
344 
4643899 
+0

非常感謝!這段代碼工作得很好。非常感激!! – user2163463 2013-03-13 03:03:34

+0

@ user2163463很高興有幫助,如果它適合你,你可以[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) 。 – 2013-03-13 03:08:03

1

嘗試以下操作:

with open(file_name, 'r') as f: 
    for line in f.readlines(): 
     rowData = line.split() 
     left, right = map(int, rowData[:2]) 
     length = right - left 
     print length 

或者:

from operator import sub 

with open(file_name, 'r') as f: 
    for line in f.readlines(): 
     print sub(*map(int, line.split()[:2])[::-1]) 
+1

我覺得'sub'對於兩個操作數來說是一個矯枉過正。 – 2013-03-13 02:47:45

+0

@AshwiniChaudhary只是一個選項,沒有更多,歐普可以簡單地閱讀有關它和了解運營商模塊 – 2013-03-13 02:50:53

+0

感謝您的幫助! – user2163463 2013-03-13 03:03:52

0
f = open(file_name, 'r') 
for line in f.readlines(): 
    x, y = line.split(' ')[:2] 
    print int(y) - int(x) 
+0

感謝您的回答! – user2163463 2013-03-13 03:04:13

2

這是因爲list.pop()將退回「殺出關閉「項目,它不會退回再次列出清單。

相反,你寫了這deleteLast功能,這將是隻是爲了更好地使用這樣的片段:

L2 = line.split()[0:2]

你會因爲你的while循環是不是以後碰到另一個問題完全推進。考慮使用for循環代替。