我想在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'
感谢所有帮助。
答案 0 :(得分:2)
这是因为list.pop()
正在返回“弹出”项,它不会再次返回列表。
不是你编写的这个deleteLast
函数,最好只使用这样的切片:
L2 = line.split()[0:2]
稍后你会遇到另一个问题,因为你的while循环根本没有进展。请考虑使用for循环。
答案 1 :(得分: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
答案 2 :(得分: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])
答案 3 :(得分:0)
f = open(file_name, 'r')
for line in f.readlines():
x, y = line.split(' ')[:2]
print int(y) - int(x)