Python: 多次逐行遍历 .txt 文件
Python: Iterating over .txt file line by line multiple times
我有一个 class 可以读取 .txt 文件并对其执行一些不同的功能。我在下面提供了我的代码示例。
class Example(object):
def __init__(self,fileName):
self.file = open(fileName)
def function_a(self):
for line in self.file:
for char in line:
#Do some things
def function_b(self):
for line in self.file:
for char in line:
#Do some other things
当我创建对象并调用 function_a 或 function_b 时,一切正常。但是,如果我在调用 function_a 之后调用 function_b(反之亦然),则调用的第一个函数可以完美运行,但第二个函数的行为就好像 self.file 为空一样。
我只能假设 self.file 中嵌入了某种计数器或指针,它已被我的第一个函数激活,现在位于文件末尾。结果,当我尝试调用第二个函数时,它会在指针所在的位置拾取,并且在注意到没有更多的行之后,它 returns 没有任何错误。
假设我不能组合 function_a 和 function_b 来同时执行它们的两个操作,我该如何重置 self.file 以便当我尝试遍历它时第二次会从头开始吗?
或者我的假设是错误的,是不是发生了其他事情?
遍历文件后,您需要告诉它回到开头。
self.file.seek(0)
应该做你正在寻找的东西。
self.file
是迭代器,只能使用一次。
这意味着在你迭代 function_a
之后,
在 function_b
中无法使用它。
我认为一个好的解决方案是将文件存储在列表中,即
def __init__(self, fileName):
with open(fileName, 'r') as f:
self.file_list = f.readlines()
如果文件不是很大,这应该可以工作,否则您也可以使用 f.seek(0)
.
将文件指针设置到文件的开头
我有一个 class 可以读取 .txt 文件并对其执行一些不同的功能。我在下面提供了我的代码示例。
class Example(object):
def __init__(self,fileName):
self.file = open(fileName)
def function_a(self):
for line in self.file:
for char in line:
#Do some things
def function_b(self):
for line in self.file:
for char in line:
#Do some other things
当我创建对象并调用 function_a 或 function_b 时,一切正常。但是,如果我在调用 function_a 之后调用 function_b(反之亦然),则调用的第一个函数可以完美运行,但第二个函数的行为就好像 self.file 为空一样。
我只能假设 self.file 中嵌入了某种计数器或指针,它已被我的第一个函数激活,现在位于文件末尾。结果,当我尝试调用第二个函数时,它会在指针所在的位置拾取,并且在注意到没有更多的行之后,它 returns 没有任何错误。
假设我不能组合 function_a 和 function_b 来同时执行它们的两个操作,我该如何重置 self.file 以便当我尝试遍历它时第二次会从头开始吗?
或者我的假设是错误的,是不是发生了其他事情?
遍历文件后,您需要告诉它回到开头。
self.file.seek(0)
应该做你正在寻找的东西。
self.file
是迭代器,只能使用一次。
这意味着在你迭代 function_a
之后,
在 function_b
中无法使用它。
我认为一个好的解决方案是将文件存储在列表中,即
def __init__(self, fileName):
with open(fileName, 'r') as f:
self.file_list = f.readlines()
如果文件不是很大,这应该可以工作,否则您也可以使用 f.seek(0)
.