zoukankan      html  css  js  c++  java
  • Golang csv写操作:判断文件是否存在,创建文件并实现追加写操作

    • Golang

    • 判断文件是否存在:如果文件不存在,那么创建文件,并写入csv的标题字段和第一条数据;如果文件存在,追加写一条数据

    • 需求

      1. 给定一个以@为分隔符的字符串,分隔了4条信息,还需要再加上时间戳信息,然后按照特定的顺序写入csv中
        笔者因为任务需要,在windows和linux系统中都运行了一遍代码,发现在追加写操作时:
      2. 在windows系统中,代码 txt, err := os.OpenFile(csvName, os.O_APPEND, 0666) 运行无误
      3. 而在linux系统中,必须添加 os.O_RDWR(以读写的方式打开) 才能追加写成功,代码为 os.OpenFile(csvName, os.O_APPEND|os.O_RDWR, 0666)
    • 笔者刚开始接触Go语言,若有代码结构和语法不规范的地方,请多包涵!

    • 代码

    package main
    
    import (
    	"encoding/csv"
    	"fmt"
    	"os"
    	"strings"
    	"time"
    )
    
    func main() {
    	m3u8_dir_path := "13429235688@01@05@09"
    	data := strings.Split(m3u8_dir_path, "@")
    	//需要在index=1的地方插入时间戳,方便以“id time emo val arou”的顺序写入csv文件
    	//将index=1后面的数据保存到一个临时的切片(其实是对index后面数据的复制)
    	tmp := append([]string{}, data[1:]...)
    
    	//拼接插入的时间戳
    	data = append(data[0:1], time.Now().Format("20060102150405"))
    
    	//与临时切片再组合得到最终的需要的切片
    	data = append(data, tmp...)
    
    	fmt.Printf("data[0]: %s
    ", data[0])
    	fmt.Printf("data[1]: %s
    ", data[1])
    	fmt.Printf("data[2]: %s
    ", data[2])
    	fmt.Printf("data[3]: %s
    ", data[3])
    	fmt.Printf("data[4]: %s
    ", data[4])
    
    	csvName := data[0] + ".csv"
    	file, er := os.Open(csvName)
    	defer file.Close()
    
    	// 如果文件不存在,创建文件
    	if er != nil && os.IsNotExist(er) {
    
    		file, er := os.Create(csvName)
    		if er != nil {
    			panic(er)
    		}
    		defer file.Close()
    
    		// 写入字段标题
    		w := csv.NewWriter(file) //创建一个新的写入文件流
    		title := []string{"user_id", "time", "emo", "val", "arou"}
    
    		// 这里必须刷新,才能将数据写入文件。
    		w.Write(title)
    		w.Write(data)
    		w.Flush()
    		fmt.Printf("if end")
    	} else {
    		// 如果文件存在,直接加在末尾
    		txt, err := os.OpenFile(csvName, os.O_APPEND|os.O_RDWR, 0666)
    		defer txt.Close()
    		if err != nil {
    			panic(err)
    		}
    		w := csv.NewWriter(txt) //创建一个新的写入文件流
    		w.Write(data)
    		w.Flush()
    		fmt.Printf("else end")
    	}
    }
    

    原文链接:https://blog.csdn.net/ljrsunshine/article/details/100107705

    [Haima的博客] http://www.cnblogs.com/haima/
  • 相关阅读:
    objective-c 自定义归档
    GitHub---最简单的使用
    objective-c 单例
    objective-c 通知(Notification)
    objective-c 谓词
    objective-c KVO
    objective-c KVC
    objective-c 协议(Protocol)和代理(Delegate)
    Xcode一些方便的快捷键
    objective-c 类目(Category)和延展(Extension)
  • 原文地址:https://www.cnblogs.com/haima/p/14950219.html
Copyright © 2011-2022 走看看