使用Golang编写程序从现有文件中读取行

在实际开发中,我们经常需要从一个文件中逐行读取数据,以便进行一些操作或者分析处理。Go语言中提供了非常方便的工具来读取文件的内容。本文将介绍如何使用Go语言编写程序,从一个已有的文件中读取行。

读取整个文件

在开始阐述如何读取文件行之前,我们先看一下如何读取整个文件内容。

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    b, err := ioutil.ReadFile("test.txt")
    if err != nil {
        fmt.Print(err)
    }
    fmt.Println(string(b))
}
ioutilReadFile

逐行读取文件

bufioosbufio
package main

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

func main() {
    file, err := os.Open("test.txt")
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        fmt.Println(err)
    }
}
bufioNewScannerscannerfor

读取CSV文件

在实践中,有时候需要读取CSV文件中的内容并进行一定的排列和操作。CSV(Comma Seperated Values)格式是一种常见的数据格式,多被用于电子表格软件或数据库中进行表格式数据的交换和存储,其中逗号作为数据元素之间的分隔符。

下面是一个简单的例子,演示如何从简单的CSV文件中读取数据并进行简单的操作。

首先,定义一个包含了CSV数据的结构体。

package main

import (
    "encoding/csv"
    "fmt"
    "os"
)

type Person struct {
    Name string
    Age  string
}

接下来我们来读取一个包含以下内容的CSV文件中的数据:

Sammy,23
Wendy,25
Person
package main

import (
    "encoding/csv"
    "fmt"
    "os"
)

type Person struct {
    Name string
    Age  string
}

func main() {
    file, err := os.Open("test.csv")
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()

    reader := csv.NewReader(file)
    lines, err := reader.ReadAll()
    if err != nil {
        fmt.Println(err)
    }

    var persons []Person
    for _, line := range lines {
        person := Person{
            Name: line[0],
            Age:  line[1],
        }
        persons = append(persons, person)
    }

    for _, person := range persons {
        fmt.Println(person.Name, person.Age)
    }
}
osOpenencoding/csvNewReadercsv.ReaderReadAll()
PersonpersonsPerson

结论

在本文中,我们介绍了如何使用Go语言中的不同包来读取文件的内容,包括逐行读取和读取CSV文件。通过掌握这些技术,你可以更加轻松地读取和处理文件,从而更有效地处理大规模数据。