1.os.walk 返回指定路徑下所有文件和子文件夾中所有文件列表 其中文件夾下路徑如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print("root", root) ...
bufio包實現了有緩衝的I/O,它封裝了一個io.Reader或io.Write介面對象,創建一個實現實現了該介面,同時提供緩衝和一些文本I/O的幫助函數.
簡單的說就是,把文件讀取進緩衝(記憶體)之後再讀取的時候就可以避免文件系統的io 從而提高速度。同理,在進行寫操作時,先把文件寫入緩衝(記憶體),然後由緩衝寫入文件系統。看完以上解釋有人可能會表示困惑了,直接把 內容->文件 和 內容->緩衝->文件相比, 緩衝區好像沒有起到作用嘛。其實緩衝區的設計是為了存儲多次的寫入,最後一口氣把緩衝區內容寫入文件。下麵會詳細解釋
bufio 封裝了io.Reader或io.Writer介面對象,並創建另一個也實現了該介面的對象
io.Reader或io.Writer 介面實現read() 和 write() 方法,對於實現這個介面的對象都是可以使用這兩個方法的
以下是bufio的簡單使用:
func main() { fileName := "C:\\Users\\fcl18\\Desktop\\發言.txt" file, err := os.Open(fileName) if err != nil { fmt.Println("err", err) return } defer file.Close() // b1 := bufio.NewReader(file) //1,Read() 高效讀取 // p := make([]byte, 1024) // n1, err1 := b1.Read(p) // if err1 != nil { // fmt.Println("err", err1) // return // } // fmt.Println(n1) // fmt.Println(string(p[:n1])) //2, ReadLine 比較低級 // data, flag, err := b1.ReadLine() // fmt.Println(data) // fmt.Println(flag) // fmt.Println(err) // fmt.Println(string(data)) //3, ReadString // str, err := b1.ReadString('\n') //讀取一行 // fmt.Println(err) // fmt.Println(str) // str1, err1 := b1.ReadString('\n') //再讀一行 // fmt.Println(err1) // fmt.Println(str1) // for { // s, err := b1.ReadString('\n') // if err == io.EOF { // fmt.Println("讀取完畢") // break // } // fmt.Println(s) // } //4, ReadByte // data, err1 := b1.ReadBytes('\n') // fmt.Println(data) // fmt.Println(err1) //Scanln只讀取空格前面的數據 // s2 := "" // fmt.Println("請輸入:") // fmt.Scanln(&s2) // fmt.Println(s2) // b2 := bufio.NewReader(os.Stdin) // s2, _ := b2.ReadString('\n') //通過換行來表示讀取完畢 // fmt.Println(s2) }
bufio寫文件:
func main() { fileName := "C:\\Users\\fcl18\\Desktop\\cc.txt" file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { fmt.Println("err", err) return } defer file.Close() w1 := bufio.NewWriter(file) for i := 1; i <= 1000; i++ { w1.WriteString(fmt.Sprintf("%d:hello", i)) } w1.Flush() //將緩衝區的內容寫入 }