婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang逐行讀取文件的操作

golang逐行讀取文件的操作

熱門標簽:上海極信防封電銷卡價格 宿遷便宜外呼系統代理商 仙桃400電話辦理 地圖標注免費定制店 寧波語音外呼系統公司 不封卡外呼系統 重慶慶云企業400電話到哪申請 鄭州智能語音電銷機器人價格 湛江crm外呼系統排名

我就廢話不多說了,大家還是直接看代碼吧~

func ReadLine(fileName string) ([]string,error){
	f, err := os.Open(fileName)
	if err != nil {
		return nil,err
	}
	buf := bufio.NewReader(f)
	var result []string
	for {
		line, err := buf.ReadString('\n')
		line = strings.TrimSpace(line)
		if err != nil {
			if err == io.EOF { //讀取結束,會報EOF
				return result,nil
			}
			return nil,err
		}
		result = append(result,line)
	}
	return result,nil
}

補充:Golang讀取文件和處理超大文件方案

Golang 操作文件的讀取的方法很多,適用的場景也是各不相同,在此我們將文件的讀取分為如下幾種 :

文件整體讀取

文件分片讀取(塊級讀取)

文件行級讀取

系統的配置不同,執行的耗時也不相同,此處給出一參考

系統配置 :

OS : Windows10

Memory : 16G

CPU (英特爾)Intel® Core™ i3-4370 CPU @ 3.80GHz(3800 MHz)

1. 文件整體讀取

文件整體讀取就是將文件一次性讀取到,理解上是將文件的內容第一次就讀取完了

使用場景 :

針對小文件比較合適(大文件讀取空間和時間的消耗也很大)

對于整體性強的文件也比較合適(文件也不能太大)

代碼示例1

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`

// 將整個文件都讀取
func readAll(filePath string) {
 start1 := time.Now()
 ioutil.ReadFile(filePath)
 fmt.Println("readAll spend : ", time.Now().Sub(start1))
}
func main() {
 readAll(m11)
 readAll(m400)
}

$ go run main.go
readAll spend : 6.9999ms
readAll spend : 358.8014ms

代碼示例2

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 將文件完整讀取
func readAllBuff(filePath string) {
 start1 := time.Now()
 // 打開文件
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 // 關閉文件
 defer FileHandle.Close()
 // 獲取文件當前信息
 fileInfo, err := FileHandle.Stat()
 if err != nil {
 log.Println(err)
 return
 }
 buffer := make([]byte, fileInfo.Size())
 // 讀取文件內容,并寫入buffer中
 n, err := FileHandle.Read(buffer)
 if err != nil {
 log.Println(err)
 }
 // 打印所有切片中的內容
 fmt.Println(string(buffer[:n]))
 fmt.Println("readAllBuff spend : ", time.Now().Sub(start1))
}
func main() {
 readAllBuff(m11)
 readAllBuff(m400)
}

2. 文件分片讀取

對文件一部分一部分逐步的讀取,直到文件完全讀取完

PS : 每次讀取文件的大小是根據設置的 分片 大小 ,所以對于讀取文本類型的文件時(例如 : 日志文件)

不一定是按照你的期望逐行輸出,因為不會處理文本尾部的換行符,而是按照分片大小讀取內容

使用場景 :

讀取超大的文件很合適

讀二進制類型的文件很合適(比如:音視頻文件或者資源類型文件等)

代碼示例

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 文件一塊一塊的讀取
func readBlock(filePath string) {
 start1 := time.Now()
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 defer FileHandle.Close()
 // 設置每次讀取字節數
 buffer := make([]byte, 1024)
 for {
 n, err := FileHandle.Read(buffer)
 // 控制條件,根據實際調整
 if err != nil  err != io.EOF {
 log.Println(err)
 }
 if n == 0 {
 break
 }
 // 如下代碼打印出每次讀取的文件塊(字節數)
 //fmt.Println(string(buffer[:n]))
 }
 fmt.Println("readBolck spend : ", time.Now().Sub(start1))
}
func main() {
 readBlock(m11)
 readBlock(m400)
}

$ go run main.go
readBolck spend : 31.9814ms
readBolck spend : 1.0889488s

3. 文件逐行讀取

對文件一行一行的讀取,直到讀到文件末尾

使用場景 :

讀取超大的文件很合適(例如 : 超大log文件等)

讀取的文件最好是有換行的(如果使用單行文件組成的大文件,需要注意)

對需要分析內容的大文件

統計某些數據出現的次數

查詢某些數據是否存在

查找指定行的數據

示例代碼1

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 讀取文件的每一行
func readEachLineReader(filePath string) {
 start1 := time.Now()
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 defer FileHandle.Close()
 lineReader := bufio.NewReader(FileHandle)
 for {
  // 相同使用場景下可以采用的方法
 // func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
 // func (b *Reader) ReadBytes(delim byte) (line []byte, err error)
 // func (b *Reader) ReadString(delim byte) (line string, err error)
 line, _, err := lineReader.ReadLine()
 if err == io.EOF {
 break
 }
 // 如下是某些業務邏輯操作
 // 如下代碼打印每次讀取的文件行內容
 fmt.Println(string(line))
 }
 fmt.Println("readEachLineReader spend : ", time.Now().Sub(start1))
}
func main(){
 readEachLineReader(m11)
 readEachLineReader(m400)
}

$ go run main.go
readEachLineReader spend : 16.9902ms
readEachLineReader spend : 537.9683ms

代碼示例2

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 讀取文件的每一行
func readEachLineScanner(filePath string) {
 start1 := time.Now()
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 defer FileHandle.Close()
 lineScanner := bufio.NewScanner(FileHandle)
 for lineScanner.Scan() {
  // 相同使用場景下可以使用如下方法
 // func (s *Scanner) Bytes() []byte
 // func (s *Scanner) Text() string
 // 實際邏輯 : 對讀取的內容進行某些業務操作
 // 如下代碼打印每次讀取的文件行內容
 fmt.Println(lineScanner.Text())
 }
 fmt.Println("readEachLineScanner spend : ", time.Now().Sub(start1))
}
func main() {
 readEachLineScanner(m11)
 readEachLineScanner(m400)
}

$ go run main.go
readEachLineScanner spend : 17.9895ms
readEachLineScanner spend : 574.1722ms

4. 總結

面試中常見的類似超大文件讀取的問題,通常我們采用分片讀取或者逐行讀取的方案即可

大文件的上傳也可以采用類似的解決方案 , 每次讀取文件的部分內容上傳(寫入)網絡接口中,直至文件讀取完畢

普通的小文件并且對內容沒有太多操作的,可以采用整體讀取,速度相對較快

對文件內容有操作的采用分片讀取和逐行讀取更合適

二進制類型文件采用分片讀取或者整體讀取的方案比較合適

文件讀取不僅是本地文件,要讀去網絡上的文件(各種文檔,音視頻,圖片,和其他各種類型文件)時要訪問到文件獲取 io.ReadCloser 或者 io.Reader 后可以采用三種方式將文件內容讀取到

func ReadAll(r io.Reader) ([]byte, error) 文件完整讀取

func Copy(dst Writer, src Reader) (written int64, err error) 文件讀取并寫入

type Reader interface {
 Read(p []byte) (n int, err error)
}

通過Reader 接口的 Read 方法讀取

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang文件讀取-按指定BUFF大小讀取方式
  • Golang 實現分片讀取http超大文件流和并發控制
  • 淺談Golang是如何讀取文件內容的(7種)
  • golang 使用 viper 讀取自定義配置文件
  • 如何利用Golang解析讀取Mysql備份文件
  • golang讀取文件的常用方法總結
  • Golang 實現超大文件讀取的兩種方法

標簽:電子產品 物業服務 海南 遼寧 西雙版納 青海 安康 儋州

巨人網絡通訊聲明:本文標題《golang逐行讀取文件的操作》,本文關鍵詞  golang,逐行,讀取,文件,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang逐行讀取文件的操作》相關的同類信息!
  • 本頁收集關于golang逐行讀取文件的操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久综合综合久久综合| 中文字幕一区二区三区精华液 | 国产精品一区久久久久| 91视频一区二区| 成人18视频在线播放| www国产精品av| 亚洲美女淫视频| 亚洲成人av福利| 99精品偷自拍| 欧美日韩国产在线观看| 欧美人牲a欧美精品| 国产盗摄视频一区二区三区| 亚洲一级电影视频| 亚洲视频电影在线| 国产欧美va欧美不卡在线| 欧美一区二区三区在| 欧美日本在线观看| 综合电影一区二区三区| 欧美高清视频在线高清观看mv色露露十八 | 国产一区二区久久| 欧美va亚洲va| 99精品久久99久久久久| 国产河南妇女毛片精品久久久| 美女视频免费一区| 91色九色蝌蚪| 丁香天五香天堂综合| 亚洲二区在线观看| 国产精品视频观看| 国产99久久精品| 一区二区高清视频在线观看| 91老师国产黑色丝袜在线| 欧美日韩一区高清| 国产精品久久久久久久久快鸭| 一本色道久久加勒比精品| 日本高清不卡一区| 欧美一级午夜免费电影| 欧美午夜电影网| av电影天堂一区二区在线观看| 蜜桃av噜噜一区| 轻轻草成人在线| 亚洲第一狼人社区| 亚洲精品一二三四区| 偷拍亚洲欧洲综合| 精品理论电影在线| 在线免费观看日本欧美| 成人av网在线| 高清不卡一区二区| 91免费国产视频网站| 91久久精品午夜一区二区| 国产美女在线观看一区| 一本大道久久a久久综合婷婷| 偷拍自拍另类欧美| 国产欧美日韩另类视频免费观看 | 日韩一区二区三区四区五区六区| 亚洲午夜久久久久中文字幕久| 国产精品亚洲综合一区在线观看| 久久久久97国产精华液好用吗| 韩国欧美一区二区| 自拍偷拍亚洲欧美日韩| 成人av资源站| 国产精品77777| 久久免费美女视频| 日韩精品色哟哟| 国产日韩欧美电影| 国产欧美日韩久久| 欧美日韩亚洲综合在线 | 精品国产乱码久久久久久图片 | 亚洲高清不卡在线| 久久蜜桃一区二区| www.一区二区| 麻豆91在线观看| 亚洲日本韩国一区| 日韩欧美一区在线| 国产精品丝袜黑色高跟| 久久久青草青青国产亚洲免观| 国产激情视频一区二区在线观看 | 久久精品一区二区三区不卡| 日韩午夜激情电影| 国产一区二区在线视频| 亚洲综合激情网| 国产精品青草综合久久久久99| 91麻豆精品国产91久久久久久| 国产精品乡下勾搭老头1| 91免费观看在线| 久久se这里有精品| 国产福利91精品| 国内精品国产三级国产a久久| 免费欧美日韩国产三级电影| 日韩专区在线视频| 久久国产免费看| 国内欧美视频一区二区 | 97超碰欧美中文字幕| 久久久久久久久久看片| 国产精品婷婷午夜在线观看| 国产视频一区二区在线| 欧美日韩色一区| 欧美日韩一区二区三区在线看 | 国产一区欧美二区| www.亚洲免费av| 欧美亚洲自拍偷拍| 91精品国产综合久久久久久 | 一区二区久久久| 亚洲少妇最新在线视频| 欧美亚洲国产一卡| 国产欧美日韩亚州综合| www.成人在线| 亚洲免费观看高清完整版在线观看 | 99在线热播精品免费| 国产女人aaa级久久久级 | 91成人在线精品| 国产日韩欧美高清| 亚洲综合激情另类小说区| 一区二区三区在线免费播放| 久久久久久久一区| 喷白浆一区二区| 99综合电影在线视频| 久久国产视频网| 久久综合九色综合欧美就去吻| 欧美片在线播放| 肉色丝袜一区二区| 韩国三级在线一区| 国产精品亚洲一区二区三区妖精| 日韩av在线免费观看不卡| 国产欧美一区二区精品秋霞影院| 久久精品999| 久久精品夜色噜噜亚洲aⅴ| 国产aⅴ综合色| 亚洲视频小说图片| 欧美精品黑人性xxxx| 狠狠久久亚洲欧美| 亚洲视频每日更新| 欧美亚洲愉拍一区二区| 精品一区二区久久久| 国产精品短视频| 91官网在线观看| 免费不卡在线视频| 成人污视频在线观看| 国产精品久久久99| 亚洲成人免费在线观看| 国产白丝精品91爽爽久久| 欧美日韩国产bt| 国产精品福利影院| 国产在线观看一区二区| 欧美亚州韩日在线看免费版国语版| 日韩一区二区免费电影| 九一九一国产精品| 国产亚洲欧美日韩在线一区| 亚洲精品五月天| 日韩一区二区中文字幕| 91一区在线观看| 精品在线观看视频| 亚洲综合一区二区| 国产女人18水真多18精品一级做| 欧美日韩精品三区| a在线播放不卡| 国产一区二区精品在线观看| 亚洲网友自拍偷拍| 国产精品国产三级国产普通话三级 | 奇米影视一区二区三区| 成人综合在线网站| 国产精品成人一区二区艾草 | 日韩视频一区二区在线观看| 91婷婷韩国欧美一区二区| 国产一区二区剧情av在线| 精品一区二区三区在线观看国产 | 欧美三级三级三级| 99久久伊人久久99| 国产河南妇女毛片精品久久久| 麻豆一区二区三区| 午夜精品福利在线| 一区二区三区四区在线| 国产精品免费久久| 日韩美女视频在线| 欧美日韩国产片| 欧美三级蜜桃2在线观看| 91亚洲精品乱码久久久久久蜜桃| 国产激情精品久久久第一区二区| 激情丁香综合五月| 丝袜诱惑制服诱惑色一区在线观看| 日韩免费成人网| 亚洲第一会所有码转帖| 精品国产一区二区三区忘忧草 | 亚洲黄色性网站| 日韩欧美中文字幕精品| 91蝌蚪porny| 日本丶国产丶欧美色综合| 91丨九色丨蝌蚪富婆spa| 99久久99久久久精品齐齐 | 国产精品综合一区二区| 国产又粗又猛又爽又黄91精品| 久久99九九99精品| 久久99国产乱子伦精品免费| 国产呦萝稀缺另类资源| 国产999精品久久| caoporn国产一区二区| 91麻豆精东视频| 欧美在线一区二区| 欧美日本在线看| 亚洲精品一区二区三区福利| 中文天堂在线一区|