对文件进行第二次迭代不起作用[重复]

2024-12-13 08:36:00
admin
原创
143
摘要:问题描述:我在迭代文件时遇到了问题。以下是我在解释器中输入的内容和结果:>>> f = open('baby1990.html', 'rU') >>> for line in f.readlines(): ... print(line) ... # ... all th...

问题描述:

我在迭代文件时遇到了问题。以下是我在解释器中输入的内容和结果:

>>> f = open('baby1990.html', 'rU')
>>> for line in f.readlines():
...  print(line)
... 
# ... all the lines from the file appear here ...

当我尝试再次迭代同一个打开的文件时,我什么也没得到!

>>> for line in f.readlines():
...  print(line)
... 
>>>

根本没有输出。为了解决这个问题,我必须重新打开close()文件然后重新读取!这是正常现象吗?


解决方案 1:

是的,这是正常现象。您第一次基本上读到了文件末尾(您可以将其想象为读磁带),因此除非您重置它,否则您无法再从中读取任何内容,方法是使用 重新定位f.seek(0)到文件开头,或者关闭它然后再次打开它,这将从文件开头开始。

如果您愿意,您可以使用with语法,它将自动为您关闭文件。

例如,

with open('baby1990.html', 'rU') as f:
  for line in f:
     print line

一旦该块执行完毕,文件就会自动关闭,因此您可以重复执行该块而无需亲自明确关闭文件并再次以这种方式读取文件。

解决方案 2:

当文件对象读取文件时,它会使用指针来跟踪文件的位置。如果您读取了文件的一部分,然后稍后返回,它将从您上次中断的地方继续。如果您读取了整个文件,然后返回到同一个文件对象,它将像读取一个空文件一样,因为指针位于文件末尾,没有剩余内容可读取。您可以使用file.tell()查看文件中指针的位置并file.seek设置指针。例如:

>>> file = open('myfile.txt')
>>> file.tell()
0
>>> file.readline()
'one
'
>>> file.tell()
4L
>>> file.readline()
'2
'
>>> file.tell()
6L
>>> file.seek(4)
>>> file.readline()
'2
'

此外,您应该知道file.readlines()读取整个文件并将其存储为列表。了解这一点很有用,因为您可以替换:

for line in file.readlines():
    #do stuff
file.seek(0)
for line in file.readlines():
    #do more stuff

和:

lines = file.readlines()
for each_line in lines:
    #do stuff
for each_line in lines:
    #do more stuff

您还可以一次一行地迭代一个文件,而不必将整个文件保存在内存中(这对于非常大的文件非常有用),方法是:

for line in file:
    #do stuff

解决方案 3:

文件对象是一个缓冲区。当您从缓冲区读取时,您读取的那部分会被消耗(读取位置会向前移动)。当您读取整个文件时,读取位置位于文件末尾(EOF),因此它不会返回任何内容,因为没有剩余内容可读取。

如果由于某种原因必须重置文件对象的读取位置,您可以执行以下操作:

f.seek(0)

解决方案 4:

当然。这是正常且理智的行为。您可以直接关闭rewind文件,而不是重新打开。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用