Programing

Golang : 텍스트 파일을 읽는 방법?

crosscheck 2020. 10. 20. 07:20
반응형

Golang : 텍스트 파일을 읽는 방법?


이 질문에 이미 답변이 있습니다.

"file.txt"를 읽고 Golang을 사용하여 내용을 변수에 넣으려고합니다. 내가 시도한 것입니다 ...

package main

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

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

    fmt.Print(file)
}

파일이 성공적으로 읽히고 os.Open에서 반환하면 * os.File 유형이 반환됩니다.


무엇을 하려는지에 따라 다릅니다.

file, err := os.Open("file.txt")
fmt.print(file)

& {0xc082016240}을 출력하는 이유는 파일 *os.File콘텐츠가 아닌 파일 설명자 ( ) 의 포인터 값을 인쇄하기 때문 입니다. 파일 내용을 얻으려면 파일 READ설명자에서 할 수 있습니다.


모든 파일 내용 (바이트 단위)을 메모리로 읽으려면 ioutil.ReadAll

package main

import (
    "fmt"
    "io/ioutil"
    "os"
    "log"
)

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


  b, err := ioutil.ReadAll(file)
  fmt.Print(b)
}

그러나 때로는 파일 크기가 크면 청크 단위로 읽는 것이 더 메모리 효율적일 수 있습니다 : buffer-size, 따라서 io.Reader.Readfrom 구현을 사용할 수 있습니다.*os.File

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


    buf := make([]byte, 32*1024) // define your buffer size here.

    for {
        n, err := file.Read(buf)

        if n > 0 {
            fmt.Print(buf[:n]) // your read buffer.
        }

        if err == io.EOF {
            break
        }
        if err != nil {
            log.Printf("read %d bytes: %v", n, err)
            break
        }
    }

}

그렇지 않으면 표준 util 패키지를 사용할 수도 있습니다 : bufio, try Scanner. A Scanner는 tokens : separator에서 파일을 읽습니다.

기본적으로 scanner는 새 줄로 토큰을 진행합니다 (물론 scanner가 파일을 토큰 화하는 방법을 사용자 정의 할 수 있습니다 . 여기 에서 bufio test 에서 배우십시오 ).

package main

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

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

    scanner := bufio.NewScanner(file)

    for scanner.Scan() {             // internally, it advances token based on sperator
        fmt.Println(scanner.Text())  // token in unicode-char
        fmt.Println(scanner.Bytes()) // token in bytes

    }
}

마지막으로이 멋진 사이트 인 go-lang file cheatsheet 를 참조하고 싶습니다 . go-lang에서 파일 작업과 관련된 거의 모든 것을 포함하고 있습니다. 유용하게 사용되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/36111777/golang-how-to-read-a-text-file

반응형