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

2024-12-13 08:36:00
admin
原创
145
摘要:问题描述:我在迭代文件时遇到了问题。以下是我在解释器中输入的内容和结果:>>> 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用