加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 由于不同的“循环样式”导致的不同行为

发布时间:2020-12-20 11:18:19 所属栏目:Python 来源:网络整理
导读:我有一个简单的问题.导航到罚款中的某一行,然后删除所有内容.我使用合适的file.truncate()调用.但是,下面的两个代码片段表现不同. 1) with open(file,"a+b",1) as f: #Navigate to the MARKER while True: line = f.readline() if MARKER in line: f.truncat
我有一个简单的问题.导航到罚款中的某一行,然后删除所有内容.我使用合适的file.truncate()调用.但是,下面的两个代码片段表现不同.

1)

with open(file,"a+b",1) as f:
  #Navigate to the MARKER
  while True:
    line = f.readline()
    if MARKER in line:
      f.truncate()
      f.write(stuff)
      break

2)

with open(file,1) as f:
  #Navigate to the MARKER
  for line in f:
    if MARKER in line:
      f.truncate()
      f.write(stuff)
      break

(1)表现如预期.但是在(2)的情况下,文件在MARKER之后被截断了几行.我推测有一些缓冲正在进行,但正如你所看到的,我明确地将缓冲行为定义为open()调用的“行缓冲”.

有什么想法吗?我想使用更直观的“for line in file”语法…

解决方法

从 Python documentation起,5.内置类型/ 5.9.文件对象:

In order to make a for loop the most
efficient way of looping over the
lines of a file (a very common
operation),the next() method uses a
hidden read-ahead buffer.

顺便说一句:通常不鼓励使用关键字(例如文件)作为变量名.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读