-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

我们想从'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

假设:

1) 你想达到一个特定的标识符,例如'B'
2) 文件有一个排序的结构,例如'A' ... 'B' ... 'C' ...等

您可以尝试使用 seek 进行二进制搜索。

高层次的想法是:

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”函数,每次读取一行

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

你的意思是你想跳过阅读文件的前两行而不处理它们吗?

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 回答