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

如何在不加载整个文件的情况下读取dat文件最后N行并保存到数组

读取大文件最后N行并保存到数组(无需加载整个文件)

嘿,这个需求太实用了——处理大文件时最怕把整个文件塞进内存,咱们直接从文件末尾反向定位目标行,既高效又省资源!下面以Python为例,给你详细的实现方案:

核心思路

  1. 从文件末尾开始,逐步向前移动文件指针
  2. 统计遇到的换行符数量,直到找到N个(或者到达文件开头)
  3. 定位到最后N行的起始位置后,读取这部分内容并分割为数组

Python 实现代码

def get_last_n_lines(file_path, n):
    lines = []
    with open(file_path, 'r') as f:
        # 先移动到文件末尾
        f.seek(0, 2)
        file_size = f.tell()
        buffer = []
        newline_count = 0
        # 从末尾反向读取,每次读1字节
        while f.tell() > 0 and newline_count < n:
            f.seek(f.tell() - 1)
            char = f.read(1)
            if char == '\n':
                newline_count += 1
                # 收集到一个换行符,把buffer里的内容反转后加入临时列表
                if buffer:
                    lines.append(''.join(reversed(buffer)))
                    buffer = []
            else:
                buffer.append(char)
        # 处理文件开头到第一个换行符的内容(如果还有剩余)
        if buffer:
            lines.append(''.join(reversed(buffer)))
        # 因为是反向收集的,所以要再反转一次得到正确顺序
        lines = lines[::-1]
        # 如果文件总行数小于n,直接返回所有行
        return lines[:n]

# 示例调用
file_path = "your_large_file.txt"
n = 3
last_n_lines = get_last_n_lines(file_path, n)
print(last_n_lines)

代码说明

  • f.seek(0, 2):将文件指针移动到文件末尾(参数2代表相对于文件末尾的位置)
  • 反向逐字节读取,统计换行符数量,这样能精准定位最后N行的起始点
  • 用buffer临时存储反向读取的字符,遇到换行符就反转buffer得到完整的一行
  • 最后再整体反转列表,恢复行的正确顺序
  • 自动处理文件总行数小于N的情况,直接返回所有行

其他场景补充

如果是在Linux/macOS终端下快速处理,可以直接用tail命令:

# 读取最后3行并保存到数组(Bash示例)
last_lines=($(tail -n 3 your_large_file.txt))

不过这种方式适合脚本场景,编程场景还是推荐上面的Python方法更灵活可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:48:26