加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

GoLang的readLines和writeLines方法

发布时间:2020-12-16 19:02:33 所属栏目:大数据 来源:网络整理
导读:习惯了Python里面对文件的操作简单随意,刚上手Go语言这样类似C语言的文件操作方法,一时还不习惯使用buffer来读取和吸入文件。在python中文件对象可以使用readLines和writeLines来遍历文件的行,十分的方便。 如果在Go语言里面也能有这样的方法就好了,找了
习惯了Python里面对文件的操作简单随意,刚上手Go语言这样类似C语言的文件操作方法,一时还不习惯使用buffer来读取和吸入文件。在python中文件对象可以使用readLines和writeLines来遍历文件的行,十分的方便。
如果在Go语言里面也能有这样的方法就好了,找了半天API,还是没有收获。求人不如求己,自己写一个。
代码如下:
package main

import (
   "io"
   "os"
   "bufio"
   "bytes"
   "fmt"
   "strings"
)


func readLines(path string)(lines [] string,err error){
   var (
       file *os.File
       part [] byte
       prefix bool
   )
   
   if file,err = os.Open(path); err != nil {
       return
   }
   
   reader := bufio.NewReader(file)
   buffer := bytes.NewBuffer(make([]byte,1024))
   
   for {
      if part,prefix,err = reader.ReadLine();err != nil {
          break
      }
      buffer.Write(part)
      if !prefix {
         lines = append(lines,buffer.String())
         buffer.Reset()
      }
   }
   if err == io.EOF {
      err = nil
   }
   return
}


func writeLines(lines [] string,path string)(err error){
    var file *os.File
    
    if file,err = os.Create(path); err != nil{
         return
    }
    
    defer file.Close()
    
    for _,elem := range lines {
       _,err := file.WriteString(strings.TrimSpace(elem)+"n")
       if err != nil {
           fmt.Println(err)
           break
       }
    }
    return
}

func main(){
   lines,err := readLines("5906376")
   if err != nil{
      fmt.Println("Error:%sn",err)
      return
   }
   for _,line := range lines {
      fmt.Println(line)
   }
   
   err= writeLines(lines,"a.txt")
   fmt.Println(err)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读