2

我想在 Python 2.7 中采用这样的大文件:

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'

感谢所有帮助。

4

4 回答 4

2

那是因为list.pop()正在返回“弹出”项目,它不会再次返回列表。

而不是您编写的这个deleteLast函数,最好只使用这样的切片:

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

稍后您将遇到另一个问题,因为您的 while 循环根本没有前进。考虑改用 for 循环。

于 2013-03-13T02:37:48.210 回答
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
于 2013-03-13T02:36:51.983 回答
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])
于 2013-03-13T02:37:27.140 回答
0
f = open(file_name, 'r')
for line in f.readlines():
     x, y = line.split(' ')[:2]
     print int(y) - int(x)
于 2013-03-13T02:37:43.133 回答