python
2016-03-19 11 views 0 likes 
0

file.binファイル全体を読み取る次のスクリプトがありますが、ファイルの最初の1000行を読み替えるにはどうすればよいですか?ありがとう。ファイルからキー値のペアを作成する

with open("file.bin","r") as text: 
    for line in text: 
     if line.startswith('MH =') or line.startswith('MN ='): 
      value, key = line.strip().split('=') 
      res[key] = value 
      if num < 1000: 
       print '%s : %s' % (key, value) 
      num = num + 1 

答えて

1

あなたの数が1000に達すると、壊れます。

ctr = 0; 
for line in text: 
    ctr = ctr + 1 
    if ctr > 1000: 
     break 
    if line.startswith('MH =') or line.startswith('MN ='): 
     value, key = line.strip().split('=') 
     res[key] = value 
     if num < 1000: 
      print '%s : %s' % (key, value) 
     num = num + 1 
+0

IはNUM <1000はMHの数=または=代わり処理最初の1000行のMNを示すことを見出しました。スクリプトには何が間違っていますか? – Brendan

+0

@ブレンダン:逆にしたい場合は、num = num + 1を打ち切ってください。 'num + = 1'に簡略化することもできます。 'if num> = 1000:break 'を' if line.startswith ... 'ブロックの上に置いて' print'%s ... 'が' if'ブロック内にある必要がないようにすることをお勧めします。 – zondo

+0

私は実際に.binファイルの最初の1000行を処理し、MH =またはMN =で始まる行をキー値のペアとして処理するスクリプトを作成しようとしています。しかし、このスクリプトは、最初に1000 MH =またはMN =をキャプチャするようになった。 – Brendan

0

A若干異なる既存の答えを取る:たぶん

for i, line in enumerate(text): 
    if i == 1000: 
     break 
    if line.startswith('MH =') or line.startswith('MN ='): 
     value, key = line.strip().split('=') 
     res[key] = value 
     print '%s : %s' % (key, value) 

この場合の行き過ぎが、知っておくと便利にあなたができるようになる「islice」関数「itertools」ですオフトピック、また

from itertools import islice 

for line in islice(text, 1000): 
    # ... 

をしかし、あなたは(正規表現を使用してのような他のものの間で)行うことができます::以下

line.startswith(('MH =', 'MN =')) 

代わりに

line.startswith('MH =') or line.startswith('MN =') 
関連する問題