首页 > 其他分享 >go语言和bash中处理csv

go语言和bash中处理csv

时间:2024-02-26 13:22:06浏览次数:12  
标签:string err clients gocsv go csv bash Name

golang中处理csv

标准库中csv文件的一些内容

var file io.Reader
reader := csv.NewReader(file)

gocsv库

他有以下特点:

  • 简单的api来将csv内容解析成go结构体
  • 自定义解析特定类型的函数;
  • 自定义csv的reader和writer

基本使用:
下面的代码可以将csv文本的内容解析到切片中;


package main

import (
	"fmt"
	"os"

	"github.com/gocarina/gocsv"
)

type NotUsed struct {
	Name string
}

type Client struct { // Our example struct, you can use "-" to ignore a field
	Id            string `csv:"client_id"`
	Name          string `csv:"client_name"`
	Age           string `csv:"client_age"`
	NotUsedString string `csv:"-"`
	NotUsedStruct NotUsed `csv:"-"` 
}

func main() {
	clientsFile, err := os.OpenFile("clients.csv", os.O_RDWR|os.O_CREATE, os.ModePerm)
	if err != nil {
		panic(err)
	}
	defer clientsFile.Close()

	clients := []*Client{}

	if err := gocsv.UnmarshalFile(clientsFile, &clients); err != nil { // Load clients from file
		panic(err)
	}
	for _, client := range clients {
		fmt.Println("Hello", client.Name)
	}

	if _, err := clientsFile.Seek(0, 0); err != nil { // Go to the start of the file
		panic(err)
	}

	clients = append(clients, &Client{Id: "12", Name: "John", Age: "21"}) // Add clients
	clients = append(clients, &Client{Id: "13", Name: "Fred"})
	clients = append(clients, &Client{Id: "14", Name: "James", Age: "32"})
	clients = append(clients, &Client{Id: "15", Name: "Danny"})
	csvContent, err := gocsv.MarshalString(&clients) // Get all clients as CSV string
	//err = gocsv.MarshalFile(&clients, clientsFile) // Use this to save the CSV back to the file
	if err != nil {
		panic(err)
	}
	fmt.Println(csvContent) // Display all clients as CSV string

}

它是怎么处理csv的各种情况的

因为我想套用到bash处理csv的情况上, 所以必须研究它的源代码;
gocsv这个库是怎么处理各种特殊的情况的:
因为我现在要用bash来处理csv文件;
gocsv库

标签:string,err,clients,gocsv,go,csv,bash,Name
From: https://www.cnblogs.com/runninginsilence/p/18034137

相关文章

  • gogs修改gitclone 仓库地址
      查看gogsdocker容器的名称dockerps进入容器内部dockerexec-itd1bba9f39a02/bin/bash编辑gogs容器的配置文件 vi/data/gogs/conf/app.ini  [server]DOMAIN= gogs.ceshi.online   #这个是ssh的地址  HTTP_PORT=3000EXTERNAL_......
  • 运用 Argo Workflows 协调 CI/CD 流水线
    ArgoWorkflows是一个开源的容器原生工作流引擎,用于协调CI/CD在Kubernetes中的运作。它以Kubernetes自定义资源(CRD)的形式实现,使开发人员能够创建自定义API对象,以兼容的方式扩展Kubernetes的功能。 选择ArgoWorkflows的原因ArgoWorkflows旨在运行于Kubernetes......
  • 【Gorm 错误收集】Error 1215 (HY000): Cannot add foreign key constraint
    错误:Error1215(HY000):Cannotaddforeignkeyconstraint相关mysql错误:Error1215(HY000):Cannotaddforeignkeyconstraint。场景:为了方便测试人员测试产品的功能以及后续报告,PM设计了一个测试用例的功能,用于记录需要测试的产品的操作步骤。针对这个功能,我建立......
  • go 语言flag 库使用
    flag用于解析命令行选项,有过类Unix系统使用经验的童鞋对命令行选项应该不陌生,例如命令ls-al列出当前目录下所有文件和目录的详细信息,其中-al就是命令行选项。命令行选项在实际开发中很常用,特别是在写工具的时候。自定义某些参数,如python-mSimpleHTTPServer8080启动......
  • 机器学习策略篇:详解正交化(Orthogonalization)
    正交化这是一张老式电视图片,有很多旋钮可以用来调整图像的各种性质,所以对于这些旧式电视,可能有一个旋钮用来调图像垂直方向的高度,另外有一个旋钮用来调图像宽度,也许还有一个旋钮用来调梯形角度,还有一个旋钮用来调整图像左右偏移,还有一个旋钮用来调图像旋转角度之类的。电视设计......
  • go 同一个https端口实现多种认证方式
    参考kube-apiserver,访问https端口时,-k允许跳过默认的证书认证,从而实现多种认证方式。packagemainimport( "crypto/tls" "fmt" "net/http" klog"k8s.io/klog/v2")funchealthCheck(whttp.ResponseWriter,r*http.Request){ fmt.Fprintf(w,&qu......
  • golang文件和目录操作
    读取文件通过Read方法读取import( "fmt" "os")funcmain(){ /* 打开文件 */ //以只读的方式打开文件,返回一个文件指针类型的对象和error file,err:=os.Open("./test.txt") //文件打开操作完之后必须关闭文件流,可以使用defer延迟关闭 deferfile.Close()......
  • Go 100 mistakes - #71: Misusing sync.WaitGroup
       ......
  • goland的git集成不能更新项目
    goland不能拉取,报错;remote:HTTPBasic:Accessdenied.Theprovidedpasswordortokenisincorrectoryouraccounthas2FAenabledandyoumustuseapersonalaccesstokeninsteadofapassword.Seehttp://127.0.0.1:8083/help/topics/git/troubleshooting_git#......
  • Go - #70: Using mutexes inaccurately with slices and maps
      ......