Golang csv寫操作:判斷檔案是否存在,建立檔案並實現追加寫操作
阿新 • • 發佈:2021-06-29
-
Golang
-
判斷檔案是否存在:如果檔案不存在,那麼建立檔案,並寫入csv的標題欄位和第一條資料;如果檔案存在,追加寫一條資料
-
需求
- 給定一個以@為分隔符的字串,分隔了4條資訊,還需要再加上時間戳資訊,然後按照特定的順序寫入csv中
筆者因為任務需要,在windows和linux系統中都運行了一遍程式碼,發現在追加寫操作時: - 在windows系統中,程式碼 txt, err := os.OpenFile(csvName, os.O_APPEND, 0666) 執行無誤
- 而在linux系統中,必須新增 os.O_RDWR(以讀寫的方式開啟) 才能追加寫成功,程式碼為 os.OpenFile(csvName, os.O_APPEND|os.O_RDWR, 0666)
- 給定一個以@為分隔符的字串,分隔了4條資訊,還需要再加上時間戳資訊,然後按照特定的順序寫入csv中
-
筆者剛開始接觸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