重用python文件处理程序?
我是python的新手,我 需要帮助才能理解下面的代码吗-重用python文件处理程序?,python,python-3.x,Python,Python 3.x,我是python的新手,我 需要帮助才能理解下面的代码吗- def main(): print('main') fh = open('C:\\Python\\lines.txt') for line in fh.readlines(): print(line, end = '') fh = open('C:\\Python\\lines.txt') for index,line in enumerate(fh.readlines()):
def main():
print('main')
fh = open('C:\\Python\\lines.txt')
for line in fh.readlines():
print(line, end = '')
fh = open('C:\\Python\\lines.txt')
for index,line in enumerate(fh.readlines()):
print(index, line, end = '')
if __name__ == "__main__":main()
当我移除第二个fh=打开…,然后
第二个for循环不打印。为什么?文件句柄包含位置指针。您可以使用
fh.tell
找到您的位置。它将在每一行的文件中移动。到达行尾后,如果要再次遍历它,需要重置此指针fh.seek(0)
将为您完成此任务。您的文件句柄包含一个位置指针。您可以使用fh.tell
找到您的位置。它将在每一行的文件中移动。到达行尾后,如果要再次遍历它,需要重置此指针fh.seek(0)
将为您完成此任务。您应该通读一篇文章。由于没有关闭fh
的第一个实例,在较大的程序中,您将遇到系统内核因打开的文件句柄过多而导致程序失败的问题,这肯定是一件坏事。在传统语言中,您需要进行更多的舞蹈,但在python中,您可以使用上下文管理器:
with open('C:\\Python\\lines.txt') as fh:
for line in fh.readlines():
print(line, end = '')
当然,文件位置是在每次读取文件时都会更改的,这会将位置放在末尾,因此如果您想这样做
with open('C:\\Python\\lines.txt') as fh:
for line in fh.readlines():
print(line, end = '')
for line in fh.readlines():
print(index, line, end = '')
除非在两个for循环之间执行fh.seek(0),否则第二组read将无法读取任何内容。您应该通过。由于没有关闭fh
的第一个实例,在较大的程序中,您将遇到系统内核因打开的文件句柄过多而导致程序失败的问题,这肯定是一件坏事。在传统语言中,您需要进行更多的舞蹈,但在python中,您可以使用上下文管理器:
with open('C:\\Python\\lines.txt') as fh:
for line in fh.readlines():
print(line, end = '')
当然,文件位置是在每次读取文件时都会更改的,这会将位置放在末尾,因此如果您想这样做
with open('C:\\Python\\lines.txt') as fh:
for line in fh.readlines():
print(line, end = '')
for line in fh.readlines():
print(index, line, end = '')
除非在两个for循环之间执行
fh.seek(0)
,否则第二组read将无法读取任何内容。fh.seek(0)
?您需要重置手柄的内部位置。fh.seek(0)
?您需要重置手柄的内部位置。谢谢。这个API/文档在哪里?@BoratSagdiyev-谢谢。pythonapi看起来凌乱难看。Java非常干净。无论如何,我会接受的。谢谢。这个API/文档在哪里?@BoratSagdiyev-谢谢。pythonapi看起来凌乱难看。Java非常干净。无论如何,我会接受的。是的,当fh不再使用时,必须放置fh.close()
。如果将与一起使用,则不会,因为文件处理程序上下文管理器将为您处理关闭。是的,当fh不再使用时,必须放置fh.close()
。如果将与一起使用,则不会,因为文件处理程序上下文管理器将为您处理关闭。