GO에서 파일을 한 줄씩 효율적으로 읽는 방법

  1. 패키지 및 필요한 수입품
  2. 한 줄씩 읽기
  3. 한 줄씩 파일을 읽는 완전한 코드
  4. 이동 중에Scanner동작 구성

특히 파일을 읽고 쓰는 파일 I/O는 프로그래밍 언어의 일반적인 기능입니다. 종종 파일을 한 줄씩 읽어야합니다. GO는 기본적으로 버퍼링 된 I/O를 구현하는 bufio 패키지를 제공합니다. bufio는 특히 텍스트 파일을 읽고 쓰는 데 유용한 유형과 기능을 제공합니다.

패키지 및 필요한 수입품

package main

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

GO 표준 라이브러리에서 몇 가지 가져 오기가 필요합니다.

  • os - 플랫폼 독립적 인 OS 기능 인터페이스
  • fmt - 형식화 된 I/O 기능 구현
  • log - -표준 로깅 패키지
  • bufio - 버퍼링 된 I/O 지원

한 줄씩 읽기

파일을 읽기 전에 먼저 파일에 포인터 유형을 반환하는os.Open()함수를 사용하여 파일을 열어야합니다. 코드 스 니펫에 표시된test.txt 파일은 미리 존재해야합니다 (파일의 경로를 입력하십시오).

bufio.NewScanner(file)함수는 파일을 통한 읽기를 지원하는 함수가있는 스캐너 유형을 반환합니다.

파일을 한 줄씩 읽으려면 새로운Scanner-Scan에서 스캐너를 새로운 토큰 (이 경우 새 줄)과Text(또는Byte)는 Scan이 호출 될 때 생성 된 최신 토큰을 읽습니다.

파일을 읽을 때 오류가 발생하면 새Scanner에서Err()메소드를 호출하여 처리 할 수 ​​있습니다. 그러면Scanner에서 발생한 첫 번째 비 종료 파일 오류가 리턴됩니다.


func main(){
    // open the file
    file, err := os.Open("test.txt")

    //handle errors while opening
    if err != nil {
        log.Fatalf("Error when opening file: %s", err)
    }


    fileScanner := bufio.NewScanner(file)

    // read line by line
    for fileScanner.Scan() {
        fmt.Println(fileScanner.Text())
    }
    // handle first encountered error while reading
    if err := fileScanner.Err(); err != nil {
        log.Fatalf("Error while reading file: %s", err)
    }

    file.Close()
}

한 줄씩 파일을 읽는 완전한 코드

한 줄씩 파일을 읽는main.go의 전체 코드는 다음과 같습니다.

다음을 입력해야합니다.

    $ go run main.go

터미널에서 프로그램을 실행합니다.


package main

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

func main() {
    // open the file
    file, err := os.Open("test.txt")

    //handle errors while opening
    if err != nil {
        log.Fatalf("Error when opening file: %s", err)
    }

    fileScanner := bufio.NewScanner(file)

    // read line by line
    for fileScanner.Scan() {
        fmt.Println(fileScanner.Text())
    }
    // handle first encountered error while reading
    if err := fileScanner.Err(); err != nil {
        log.Fatalf("Error while reading file: %s", err)
    }

    file.Close()
}

이동 중에Scanner동작 구성

Scanner유형에는 SplitFunc 함수를 허용하는 스플릿 기능이있어 스캐너가 주어진 바이트 슬라이스를 어떻게 분할할지 결정합니다. 기본SplitFuncScanLines이며, 후행 줄 끝 마커가 제거 된 텍스트의 각 줄을 반환합니다.

예를 들어 아래 코드 스 니펫에 표시된대로 단어를 사용하여 분할 할 수 있습니다.


scanner.Split(bufio.ScanWords)  //configure how the scanner behaves