1. 程式人生 > 其它 >Golang csv寫操作:判斷檔案是否存在,建立檔案並實現追加寫操作

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\n", data[0])
	fmt.Printf("data[1]: %s\n", data[1])
	fmt.Printf("data[2]: %s\n", data[2])
	fmt.Printf("data[3]: %s\n", data[3])
	fmt.Printf("data[4]: %s\n", 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