2

Python 2.7 で次のような大きなファイルを取得したいと思います。

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

ファイルを 1 行ずつ読み込み、3 番目の要素を無視し、各行の 2 番目の要素を最初の要素で減算します。したがって、上記の 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 に答える