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

Linux Mint下Python读取文件为空问题求助(aiogram开发场景)

问题排查与修复方案

核心问题分析

你的代码存在几个关键错误,结合Linux文件系统特性,导致了读取异常:

  • 变量类型不匹配:refer = text.split()得到的是列表,但你在判断el.split(':')[0] == refer时,是拿字符串和列表做比较,永远不会相等,循环逻辑完全不会触发。调试时看到"数据变空",是因为readlines()会把文件指针移到文件末尾,之后再读取自然返回空列表。
  • 文件打开模式错误:你用'r'只读模式打开文件,却试图用print(..., file=referals)写入,这会直接抛出IO错误,可能被aiogram的异常捕获机制隐藏,导致你误以为是读取问题。
  • 工作目录不一致(Linux特性):Linux下Python脚本的当前工作目录,不一定是你存放脚本的目录。如果referals_admins文件不在机器人进程的工作目录下,你读取的可能是一个不存在的空文件(或位置错误的文件)。

修复后的代码示例

text = message.text
split_text = text.split()
# 根据业务逻辑取分割后的目标元素,这里假设取第一个有效字符串作为refer
refer = split_text[0] if len(split_text) > 1 else None

if refer:
    # 建议使用绝对路径避免工作目录问题,例如:/home/your_username/bot/referals_admins
    file_path = 'referals_admins'
    
    # 先读取所有内容,修改后重新写入
    with open(file_path, 'r') as f:
        lines = f.readlines()
    
    updated = False
    with open(file_path, 'w') as f:
        for line in lines:
            line = line.strip()
            if not line:
                f.write('\n')
                continue
            parts = line.split(':')
            if len(parts) != 2:
                f.write(line + '\n')
                continue
            ref_code, count = parts
            if ref_code == refer:
                new_count = int(count) + 1
                f.write(f'{refer}:{new_count}\n')
                updated = True
            else:
                f.write(line + '\n')
        # 若为新refer码,追加到文件末尾(可选,根据需求调整)
        if not updated:
            f.write(f'{refer}:1\n')

额外排查步骤

  • 确认文件路径:在脚本开头添加import os; print(os.getcwd()),查看机器人运行的当前工作目录,确保referals_admins文件在该目录下,或直接使用绝对路径。
  • 检查文件权限:执行ls -l referals_admins查看权限,确保机器人进程有读写权限,必要时用chmod 644 referals_admins调整权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:25:24