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

Python如何根据列表存储的起止行号打印文件对应行

实现方法

你已经拿到了每段坐标对应的起止行号,只需要先把文件所有行读入为索引和行号对应的列表,再配对遍历起止列表切片取内容打印即可,注意适配Python2.7的语法和列表索引规则:

  • Python列表索引从0开始计数,如果你之前计算的CStart/CEnd是按文本编辑器显示的1-based行号存储,取内容时需要把行号减1,否则会出现行错位
  • Python列表切片是左闭右开区间,要取到结束行号对应的内容,切片结束位置需要设为end_line + 1,否则会漏掉最后一行
  • readlines()读入的每行末尾自带换行符,打印时建议去掉末尾换行,避免出现多余空行

完整修改后的代码

def printCart(filename):
    # 一次性读入文件所有行,行索引和行号一一对应
    with open(filename, 'r') as f:
        all_lines = f.readlines()
    
    CStart = []
    CEnd = []
    # 保留你原有的起止行号计算逻辑
    for i in range(len(slist)):
        start = slist[i] + 5
        end = start + int(num) - 1
        CStart.append(start)
        CEnd.append(end)
    
    # 配对遍历每一组起止行号,逐段打印内容
    for seg_num, (start, end) in enumerate(zip(CStart, CEnd)):
        print("=" * 15)
        print("第%d段坐标:" % (seg_num + 1))
        # 如果你的行号是1-based,把下面切片改为 all_lines[start-1 : end]
        for line in all_lines[start : end + 1]:
            print(line.rstrip('\n'))
    
    return CStart, CEnd

补充说明

如果处理的文件体积特别大(几百MB以上),不适合一次性读入内存,可以换逐行遍历+标记位的写法:逐行读取时维护一个当前行号计数器,判断当前行号是否落在任意一段坐标的行区间内,落在区间内就打印,区间外就跳过。但针对存坐标段的常规小文件,上面的写法逻辑最简洁,排查问题也方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:27:26