当前位置: 首页 > 面试题库 >

如何每10秒从Go中读取大文件的最后几行

岳炎彬
2023-03-14
问题内容

我如何从一个大的日志文件中读取最后两行而不将其完全加载到内存中?

我需要每10秒钟阅读一次(在Win机上)…并且我被困在尝试阅读最后几行。

package main

import (
    "fmt"
    "time"
    "os"
)

const MYFILE = "logfile.log"

func main() {
    c := time.Tick(10 * time.Second)
    for now := range c {
        readFile(MYFILE)
    }
}

func readFile(fname string){
    file, err:=os.Open(fname)
    if err!=nil{
        panic(err)
    }
    buf:=make([]byte, 32)
    c, err:=file.ReadAt(32, ????)
    fmt.Printf("%s\n", c)


}

日志文件类似于:

07/25/2013 11:55:42.400, 0.559
07/25/2013 11:55:52.200, 0.477
07/25/2013 11:56:02.000, 0.463
07/25/2013 11:56:11.800, 0.454
07/25/2013 11:56:21.600, 0.424
07/25/2013 11:56:31.400, 0.382
07/25/2013 11:56:41.200, 0.353
07/25/2013 11:56:51.000, 0.384
07/25/2013 11:57:00.800, 0.393
07/25/2013 11:57:10.600, 0.456

谢谢!


问题答案:

您可以使用file.Seek()或file.ReadAt()几乎结束,然后向前阅读。除非您知道2行=
x字节,否则您只能估计从哪里开始搜索。

您可以使用os.Stat(name)获得文件长度

这是一个基于ReadAt,Stat和示例日志文件的示例:

package main

import (
    "fmt"
    "os"
    "time"
)

const MYFILE = "logfile.log"

func main() {
    c := time.Tick(10 * time.Second)
    for _ = range c {
        readFile(MYFILE)
    }
}

func readFile(fname string) {
    file, err := os.Open(fname)
    if err != nil {
        panic(err)
    }
    defer file.Close()

    buf := make([]byte, 62)
    stat, err := os.Stat(fname)
    start := stat.Size() - 62
    _, err = file.ReadAt(buf, start)
    if err == nil {
        fmt.Printf("%s\n", buf)
    }

}


 类似资料:
  • 问题内容: 在我的PHP应用程序中,我需要 从许多文件 (主要是日志) 的末尾开始读取多行 。有时我只需要最后一个,有时我需要数十或数百。基本上,我想像Unix 命令一样灵活。 这里有一些关于如何从文件中获取最后一行的问题(但是我需要 N 行),并给出了不同的解决方案。我不确定哪一个最好,哪个表现更好。 问题答案: 方法概述 在互联网上搜索时,我遇到了不同的解决方案。我可以将它们分为三种方法: 天

  • 问题内容: 我想读取一个非常大的文件的最后n行,而不使用Java将整个文件读入任何缓冲区/内存区域。 我环顾了JDK API和Apache Commons I / O,但无法找到适合此目的的一个。 我在想UNIX中使用tail或更少的方式。我认为他们不会加载整个文件,然后显示文件的最后几行。在Java中也应该有类似的方法。 问题答案: 如果使用,则可以使用和到达文件末尾附近的特定点,然后从那里开始

  • 问题内容: 我正在制作一个日志,我想读取log.txt文件的最后一行,但是在读取最后一行时,我无法使BufferedReader停止。 这是我的代码: 问题答案: 这是一个很好的解决方案。 在代码中,您可以仅创建一个名为的辅助变量,并不断将其初始化为当前行,如下所示:

  • 本文向大家介绍如何在PHP中仅读取文本文件的最后5行?,包括了如何在PHP中仅读取文本文件的最后5行?的使用技巧和注意事项,需要的朋友参考一下 要仅读取文本文件的最后5行,代码如下- 示例 输出结果 这将产生以下输出- 打开文件并计算文件中的行数,从最后一行开始读取5行。

  • 问题内容: 我知道如何读取字节,但是如何在Python中读取位? 我只需要从二进制文件中读取5位(而不是8位[1字节]) 有什么想法或方法吗? 问题答案: Python一次只能读取一个字节。您需要读完整的字节,然后从该字节中提取所需的值,例如 或者,如果您想要5个最低有效位,而不是5个最高有效位: 一些其他有用的位操作信息可以在这里找到:http : //wiki.python.org/moin/

  • 读写文件是很多程序的基本任务,下面我们看看Go里面的文件读取。 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 读取文件的函数调用大多数都需要检查错误, // 使用下面这个错误检查方法可以方便一点 func check(e error) { if e != nil {