2013-03-13 45 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循环代替。

相关问题