You need to enable JavaScript to run this app. Python读取远程服务器txt指定行写入本地仅写第一行如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Python读取远程服务器txt指定行写入本地仅写第一行如何解决

代码问题与修复方案

存在的问题

  • 缩进错误:代码多处缩进不符合Python语法规范,with代码块、for循环、文件写入逻辑的缩进全部错乱,会直接触发语法报错
  • 循环强制中断:遍历islice返回的目标行集合时,第一行就执行break跳出循环,只会拿到第一行的内容,是仅写入第一行的核心原因
  • 变量未定义:代码中first_line、output两个变量没有提前赋值,运行时会直接报错
  • 写入逻辑位置错误:写文件的逻辑放在for循环外,即使去掉break,也只会写入最后一次遍历到的行内容
  • 文件未正确关闭:本地文件用w模式打开后没有手动关闭也没有用上下文管理器管理,缓冲区内容未刷入磁盘就打开文件,也会导致写入内容缺失

修复后的代码

import itertools
import os

def GetEndLastLine(first_line=0): # 可传入要读取的起始行号,默认从第0行开始
    # 读取远程日志文件,计算总行数
    log_path = '//10.10.10.10/d$/log/server.log'
    last_line = sum(1 for line in open(log_path, encoding='utf-8', errors='ignore'))
    print(f"日志总行数:{last_line}")
    
    output = ""
    # 读取指定范围的行
    with open(log_path, encoding='utf-8', errors='ignore') as f:
        for linex in itertools.islice(f, first_line, last_line):
            print(linex, end='')
            output += linex # 累加所有目标行内容
    
    # 写入本地文件
    with open(r"LogFile.txt", "w", encoding='utf-8') as x:
        x.write("LOGS START HERE****\n\n"+ output)
    
    os.system("start notepad++.exe LogFile.txt")

# 调用示例:从第10行开始读取
# GetEndLastLine(first_line=10)

补充说明

  • 新增了编码参数避免中文乱码,加了errors='ignore'防止日志中存在特殊字符导致读取中断
  • 用上下文管理器管理所有文件操作,无需手动关闭文件,自动刷入缓冲区内容到磁盘
  • 你可以根据自己的需求调整first_line的传入值,指定读取的起始行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:33:04