Skip to main content
 首页 » 编程设计

python之读取两个单词之间的文件行

2025年05月04日15lovecherry

我有一个包含数字和 2 个单词的文件:“start”和“middle” 我想从一个数组中读取从“开始”到“中间”的数字,并将文件从“中间”到结尾的数字读取到另一个数组中。 这是我的 python 代码:

with open("../MyList","r") as f: 
        for x in f.readlines(): 
            if x == "start\n": 
                continue 
            if x == "middle\n": 
                break 
            x = x.split("\n")[0] 
            list_1.append(int(x))  
 
        print list_1 
 
        for x in f.readlines(): 
            if x == "middle\n": 
                continue 
            list_2.append(int(x)) 
 
        print list_2 

但问题是我的程序永远不会进入第二个循环并跳转到

print list_2 

我搜索了较早的问题,但无法找出问题所在。

请您参考如下方法:

这是因为你在第一个循环中读取了整个文件,当它进入第二个循环时,文件指针已经在文件末尾,你将从 f.readlines() 得到一个空列表。

您可以通过重新打开文件或在第二个 for 循环之前使用 f.seek(0) 将文件指针再次设置为文件开头来解决此问题

with open("../MyList","r") as f: 
    with open("../MyList","r") as f: 
        for x in f.readlines(): 
            # process your stuff for 1st loop 
 
        # reset file pointer to beginning of file again 
        f.seek(0) 
 
        for x in f.readlines(): 
            # process your stuff for 2nd loop 

如果你正在处理大文件,将整个文件读入内存并不是那么有效,你可以只遍历文件对象而不是像下面的代码那样将所有文件读入内存

list1 = [] 
list2 = [] 
list1_start = False 
list2_start = False 
with open("../MyList","r") as f: 
    for x in f: 
        if x.strip() == 'start': 
            list1_start = True 
            continue 
        elif x.strip() == 'middle': 
            list2_start = True 
            list1_start = False 
            continue 
 
        if list1_start: 
            list1.append(x.strip()) 
        elif list2_start: 
            list2.append(x.strip()) 
 
print(list1) 
print(list2)