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

2024-12-13 08:36:00
admin
原创
172
摘要:问题描述:我在迭代文件时遇到了问题。以下是我在解释器中输入的内容和结果:>>> 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3983  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2747  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   82  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   90  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   79  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用