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

Python 3:如何按行号读取大文本文件中的指定行

解决大文本文件精准读取指定行的问题

我太懂这种困扰了——几G大的URL文本文件,全加载到列表里直接内存告警,用readline()又没法直接跳到目标行对吧?别慌,给你两个实用的方案,内存友好还能精准定位:

方案一:逐行遍历计数(最通用)

这方法看起来朴实,但对大文件特别友好,因为Python的文件对象是迭代器,遍历的时候只会把当前行加载到内存,完全不会占用额外的大内存。代码示例:

def fetch_target_line(file_path, target_line_num):
    current_count = 0
    # 注意编码要和你的文件匹配,比如gbk、utf-8
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            current_count += 1
            if current_count == target_line_num:
                # 去掉换行符,返回干净的URL
                return line.rstrip('\n')
    # 如果目标行号超过文件总行数,返回None
    return None

关键点说明:

  • 行号是从1开始计数的,如果你习惯从0开始,把current_count的初始值改成-1就行
  • 一定要匹配文件的编码,不然会出现乱码或者读取失败的情况
  • 空白行也会被计入行号,如果你要跳过空白行,可以在循环里加个判断:if not line.strip(): continue

方案二:仅适用于固定长度行的文件(不推荐用于URL文件)

如果你的文件每行长度完全一致(比如每行都是固定字节数的URL),可以用seek()直接定位字节偏移量,速度会更快,但URL长度肯定参差不齐,所以这个方案只做补充:

def fetch_fixed_length_line(file_path, target_line_num, line_length):
    offset = (target_line_num - 1) * line_length
    with open(file_path, 'rb') as f:
        f.seek(offset)
        return f.read(line_length).decode('utf-8').rstrip('\n')

为什么你用readline()没成功?

你之前用handle.readline()的时候,是不是每次调用都只读一行,但要跳到第N行就得连续调用N次?比如要读第1000行,就得循环调用1000次readline()——其实和方案一的逻辑本质一样,但用for line in f的写法更简洁直观,也不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:44:16