重用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()):

我是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()):
        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()
。如果将
一起使用,则不会,因为文件处理程序上下文管理器将为您处理关闭。