我有一个包含数字和 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)
