You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

如果确实需要持久化存储上一个值(比如程序中断后重启可以接着上次的状态对比),正确的文件读写逻辑应该是:

  1. 程序启动时先读取一次last.txt的内容赋值给last_val,文件不存在/内容为空就设为None
  2. 每次对比完成后把新的值写入last.txt覆盖原有内容,不要每次判断的时候都打开清空文件

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:27:00