`
david_je
  • 浏览: 373111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GoLang的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:%s\n",err)
      return
   }
   for _,line := range lines {
      fmt.Println(line)
   }
   
   err= writeLines(lines,"a.txt")
   fmt.Println(err)
}
分享到:
评论
1 楼 ebookbug 2016-09-17  
可以试试现在的版本,性能应该不错了
https://siongui.github.io/2016/04/06/go-readlines-from-file-or-string/

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

func File2lines(filePath string) []string {
      f, err := os.Open(filePath)
      if err != nil {
              panic(err)
      }
      defer f.Close()

      var lines []string
      scanner := bufio.NewScanner(f)
      for scanner.Scan() {
              lines = append(lines, scanner.Text())
      }
      if err := scanner.Err(); err != nil {
              fmt.Fprintln(os.Stderr, err)
      }

      return lines
}

相关推荐

    Golang中switch语句和select语句的用法教程

    本文主要给大家介绍了关于Golang中switch和select用法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 一、switch语句 switch语句提供了一个多分支条件执行的方法。每一个case可以携带一个表达式...

    golang中文手册_golang中文手册_goapiCHM_golang中文手册.chm_

    Go语言,又称Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它设计的目标是提高开发者的生产效率,同时保持系统级编程的性能。Go语言的设计受到了C、 Pascal、 Miranda和...

    golang安装教程和安装包.zip

    首先,我们来理解Golang是什么,然后逐步介绍在Ubuntu上安装Go和GoLand的过程。 Golang,通常简称为Go,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。Go的设计目标是提高开发者的...

    web无插件播放rtsp流和配套golang 的rtsp转码服务

    Golang程序(可能就是goRtsp.exe)作为一个中间层,它接收RTSP流,对视频流进行处理(例如,转码、切片),然后提供一个Web友好的格式,如HLS,使Web前端可以轻松地通过AJAX或Fetch API请求并播放这些流。...

    Golang如何调用Python代码详解

    前言 Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发...本文以 Ubuntu 18.04 作为开发和运行平台进行演示。 其实在使用 cgo 之前,笔者也考虑过使用 grpc 的方式。比如可以将需要调用的 pytho

    Go-weixin-golang-sdk微信golang工具包

    weixin-golang-sdk 微信golang工具包

    golang-odbc 驱动

    此外,golang-odbc 还提供了 `Prepare` 和 `Exec` 方法用于执行参数化查询和 DDL 语句,以及 `Begin`, `Commit`, 和 `Rollback` 方法进行事务控制。 值得注意的是,虽然 golang-odbc 驱动提供了一个与数据库交互的...

    Golang 中的 cgo 使用方法,调用 mysql (c语言类库)为案例.pdf

    Golang 中的 cgo 使用方法,调用 mysql (c语言类库)为案例

    Golang精编100题.pdf

    中级题目的判断题可能会探讨程序包的初始化顺序和方法,以及在并发编程中如何使用channel进行协程间的通信。 题目中还涉及了Golang中一些较为高级的特性,例如类型转换和重构,以及对const常量定义的考察。在类型...

    golang开发modbus rtu实例

    在本文中,我们将深入探讨如何使用Golang语言开发一个Modbus RTU实例,并结合Modbus Slave软件进行...理解并熟练掌握这种通信协议的实现和测试方法,是成为一名优秀的Golang开发者和工业自动化工程师的关键技能之一。

    Golang-磁力链接和 BT 种子的搜索引擎.zip

    Golang-磁力链接和 BT 种子的搜索引擎

    golang.org/x包

    在Golang生态系统中,`golang.org/x`是一个非常重要的包集合,它包含了大量由Go官方维护和贡献的扩展库。这些包覆盖了各种功能,从网络编程到文本处理,为Go开发者提供了丰富的工具和解决方案。`golang.org/x`包系列...

    golang windowns界面开发框架

    在编程领域,Go语言(Golang)以其高效、简洁和并发特性受到了许多开发者的青睐。在Windows平台上,尽管Go语言最初的设计目标并非图形用户界面(GUI)开发,但随着技术的发展,已经出现了一些优秀的框架使得Go语言也...

    test-golang-on-docker:学习为golang和mysql创建最小环境的记录

    在docker上测试golang 使用golang和mysql创建一个最小的开发环境

    循环鼠标自动点击功能- Golang实现

    Golang,作为一种现代且高效的编程语言,因其强大的系统级编程能力和并发特性而受到广泛欢迎。在本文中,我们将深入探讨如何利用Golang实现这个功能,并了解相关的核心知识点。 首先,我们需要了解的是Golang的图形...

    golang实现高性能IM单聊系统,UDP分发

    一种常见的方法是使用哈希表或者布隆过滤器来存储客户端的IP和端口,以便快速查找和定位目标。 为了优化性能,我们还需要考虑以下几点: 1. **缓冲区管理**:设置适当的读写缓冲区大小可以减少系统调用的频率,...

    golang解析数字证书

    本文将深入探讨如何在Golang中解析PKCS#1和PKCS#8格式的私钥,以及与数字证书相关的概念。 首先,让我们了解一些基本概念: 1. **数字证书(Digital Certificate)**:也称为X.509证书,是一种标准格式,用于在...

    Golang开发培训知识图谱

    Golang开发培训知识图谱覆盖了Golang语言的基础知识点和高级应用技能。Golang(通常称为Go)是由Google开发的静态类型、编译型语言,其设计初衷是让编程更简单、高效、安全。该知识图谱主要包含以下几个模块: 1. *...

    golang环境配置及对接s3对象存储demo手册及源代码

    - **golang-demo使用手册.docx**:这个文档很可能是详细指导如何使用`golang-demo.go`源代码的指南,包括配置步骤、调用API的示例以及可能出现的问题和解决方案。建议仔细阅读,以便更好地理解和应用代码。 - **...

    golang http连接复用方法

    标题中提到的"Golang HTTP连接复用方法"主要涉及到两个关键部分:服务器端的配置和客户端的设置。 **服务器端配置** 在Golang的`http.Server`中,默认情况下已经启用了Keep-Alive选项,这意味着服务器会尝试复用...

Global site tag (gtag.js) - Google Analytics