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
相关产品推荐
相关产品推荐

