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

특히 파일을 읽고 쓰는 파일 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
함수를 허용하는 스플릿 기능이있어 스캐너가 주어진 바이트 슬라이스를 어떻게 분할할지 결정합니다. 기본SplitFunc
는 ScanLines
이며, 후행 줄 끝 마커가 제거 된 텍스트의 각 줄을 반환합니다.
예를 들어 아래 코드 스 니펫에 표시된대로 단어를 사용하여 분할 할 수 있습니다.
scanner.Split(bufio.ScanWords) //configure how the scanner behaves