-1

条件でループを開始するにはどうすればよいですか: たとえば。

I have following contents in a file:
text1
text2
text3
text4
text5
text6

問題は、text3 から text5 までのループを開始したいということです...どうすればこのループを開始できますか。個別のパラメーターまたは別の引数が必要ですか?

わかりました、答えは良いです:

しかし、それがより大きなファイルだった場合はどうなるでしょうか?

お気に入り

'A'
text1
text2
text3
text4
text5
text6

'B'
text7
text8
text9
text10

そして、「B」から空白行までループしたいですか??

私はすべての助けに感謝します..ありがとう

4

5 に答える 5

0

仮定:

1) 特定の識別子 (例: 'B') に到達したい
2) ファイルがソートされた構造を持っている (例: 'A' ... 'B' ... 'C' ... など)

シークで二分探索を試すことができます。

高レベルのアイデアは次のとおりです。

1) ファイルのサイズを取得します。
2) ファイルの途中までシークします。
識別子 (found_identifier など) に到達するまで、行の読み取りを開始します。if found_identifier > target_identifier: 上部の途中でシークします。
if found_identifier < target_identifier: 下部の途中でシークします。
if found_identifier == target_identifier: ファイル内の適切な領域に到達しました。

このアプローチでは、log2(ファイルのサイズ) シークを行う必要があります。これは、非常に大きなファイルを順次読み取るよりも高速です...

お役に立てれば...

于 2012-11-30T02:39:57.043 に答える
0

各行が固定長を共有している場合は、 file.seek(n) を試すことができると思います

>>> f.seek(5)     # Go to the 6th byte in the file

そうしないと

n = start_line
m = end_line

with open("text_file","r") as f
    for i in f.readlines()[n:m]:
        print i

ファイルが大きい場合は、カウンターが必要で、「open」関数を使用して、一度に 1 行を読み取る

fh = open("file","r")
start_piont = 0
n = 6     #starting row
m = 16    #ending row
row_list = [] # result row list
for l in fh:   # read a single line per time
    start_piont = start_piont + 1
    if start_piont >= n :
        row_list.append(l)
    if start_piont > m:
        break
于 2012-11-30T02:09:51.750 に答える
0

そして、「B」から空白行までループしたいですか??

唯一の「B」で始まる行から始まり、最初の空白行で停止する行を読みたいと思います。そして、ファイル全体をメモリに読み込みたくありません:

with open("your_file.txt") as file:
     start = False
     for line in file:
         if start:
            if not line.strip(): # blank 
               break # done
            process(line)
         elif line.strip() == "B":
            start = True
于 2012-11-30T03:00:23.777 に答える
0

ファイルの最初の 2 行を処理せずに読み飛ばしたいということですか?

f = open('filename')
f.readline()
f.readline()
lines=f.readines()
for line in lines:
    do whatever...

「シーク」を使用できますが、線の長さが異なる場合、シークする位置がわかりません。

于 2012-11-30T02:11:09.350 に答える
0

これは機能します:

example="""'A'
text1
text2
text3
text4
text5
text6

'B'
text7
text8
text9
text10

line11
line12
line13
""".splitlines()     # standin for a file...

flag=False
for line in example:
    if line.strip()=="'B'":
        flag=True
    if flag==True and line.strip():
        print line
    if flag==True and not line.strip():
        flag=False

プリント:

'B'
text7
text8
text9
text10
于 2012-11-30T03:25:15.243 に答える