Python使用with open写文件时os.stat获取文件大小异常问题求解
代码问题分析
你遇到的文件大小始终为0的问题核心是open('last.txt', 'w')的模式特性:
- 以
w(写入)模式打开文件时,操作系统会直接清空文件原有全部内容,把文件大小重置为0后才会进入with上下文块,所以你在块内调用os.stat查到的永远是刚被清空后的0大小。 - 额外逻辑漏洞:你每次遍历到符合条件的行就重新以
w模式打开文件,上一次写入的上一个值会被直接清空,根本无法实现存储上一行值的需求。
无需依赖文件的实现方案
直接用内存变量存储上一个符合条件的值即可,性能远高于读写文件,逻辑也更简单,示例代码如下:
import csv last_val = None with open('unfiltered_data.csv', 'r', encoding='utf-8') as inp: for row in csv.reader(inp): # 过滤符合条件的行 if row[2] == "Förvärv" and row[1] != '': current_val = row[1] # 第一次匹配时无上次值,直接初始化 if last_val is None: last_val = current_val continue # 对比当前值和上一个值 if current_val == last_val: # 相等时的自定义逻辑 print(f"当前值{current_val}与上一个值相等") else: # 不等时的自定义逻辑 print(f"当前值{current_val}与上一个值{last_val}不等") # 更新上次值为当前值,供下一次对比 last_val = current_val
如果确实需要持久化存储上一个值(比如程序中断后重启可以接着上次的状态对比),正确的文件读写逻辑应该是:
- 程序启动时先读取一次last.txt的内容赋值给
last_val,文件不存在/内容为空就设为None - 每次对比完成后把新的值写入last.txt覆盖原有内容,不要每次判断的时候都打开清空文件
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

