Go语言逐行读取文件

使用Go语言逐行读取文件,最简单的方法是使用 bufio.Scanner

常规做法

简单示例:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Open("/path/to/file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    // 注意,如果读取的行长度超过64k,则会报错
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}

字符串长度超出64K

Scan在行超过 65536 个字符时出错。如果知道行长度大于 64K,可以使用 Buffer() 方法来增加Scan的容量。

添加Buffer的示例:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Open("/path/to/file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)

    const maxCapacity = longLineLen  // 需要的容量
    buf := make([]byte, maxCapacity)
    scanner.Buffer(buf, maxCapacity)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}

使用Buffer核心代码是:

buf := make([]byte, maxCapacity)
scanner.Buffer(buf, maxCapacity)

版权声明:著作权归作者所有。

相关推荐

从jar包读取资源文件的正确方法

Java的类加载器ClassLoader提供了两个方法,用来对ClassPath里资源读取:getResource和getResourceAsStreamgetResourcepublic URL getResource(String name)访问资源的访问URL。需要注意的是,在IDEA开发工具里和打包成jar包,两个路径的形式是不一样的。IDEA开发工具结果在IDEA开发工具里,返回的是资源

Go语言把map接口转换为google.protobuf.Struct

以下是go语言把map[string]interface{}转换为google.protobuf.Struct:package pbimport ( "fmt" "reflect" st "github.com/golang/protobuf/ptypes/struct")// ToStruct转换map[string]interface{} 为ptypes.Structfunc ToStruct

JavaScript使用FileReader读取文件

FileReader是前端进行文件处理的一个重要的web api,特别是在对图片的处理上。FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTran

Go语言日志框架logrus封装

logrus在github上是一个star数比较高的go日志框架,简单封装如下:package logimport ( "fmt" "github.com/Sirupsen/logrus" "runtime" "strings")var logger = logrus.New()// 封装logrus.Fieldstype Fields logrus.Fieldsfunc SetLogLevel(

Python读取.wav音频文件

可以使用scipy.io.wavfile.read(somefile)来读取.wav音频文件。它会返回一个元组,第一项为音频的采样率,第二项为音频数据的numpy数组。用法:from scipy.io import wavfilefs, data = wavfile.read('./output/audio.wav')也可以使用PySoundFile,它也是返回一个元组,指示第一项为数据,第二项为

读取yaml文件的shell脚本

脚本如下:#!/bin/bashfunction parse_yaml() { local yaml_file=$1 local prefix=$2 local s local w local fs s='[[:space:]]*' w='[a-zA-Z0-9_.-]*' fs="$(echo @|tr @ '\034')" (