diff --git a/docs/fileutil.md b/docs/fileutil.md
index a9cc1c9..749afc6 100644
--- a/docs/fileutil.md
+++ b/docs/fileutil.md
@@ -43,6 +43,7 @@ import (
- [MTime](#MTime)
- [Sha](#Sha)
- [ReadCsvFile](#ReadCsvFile)
+- [WriteCsvFile](#WriteCsvFile)
- [WriteStringToFile](#WriteStringToFile)
- [WriteBytesToFile](#WriteBytesToFile)
@@ -663,6 +664,43 @@ func main() {
}
```
+### WriteCsvFile
+
+
Write content to target csv file.
+
+Signature:
+
+```go
+func WriteCsvFile(filepath string, records [][]string, append bool) error
+```
+
+Example:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/duke-git/lancet/v2/fileutil"
+)
+
+func main() {
+ data := [][]string{
+ {"Lili", "22", "female"},
+ {"Jim", "21", "male"},
+ }
+ err := WriteCsvFile("./testdata/test2.csv", data, false)
+ fmt.Println(err)
+
+ content, _ := ReadCsvFile("./testdata/test2.csv")
+ fmt.Println(content)
+
+ // Output:
+ //
+ // [[Lili 22 female] [Jim 21 male]]
+}
+```
+
### WriteBytesToFile
Writes bytes to target file.
diff --git a/docs/fileutil_zh-CN.md b/docs/fileutil_zh-CN.md
index d9facdf..73e22c7 100644
--- a/docs/fileutil_zh-CN.md
+++ b/docs/fileutil_zh-CN.md
@@ -43,6 +43,7 @@ import (
- [MTime](#MTime)
- [Sha](#Sha)
- [ReadCsvFile](#ReadCsvFile)
+- [WirteCsvFile](#WirteCsvFile)
- [WriteStringToFile](#WriteStringToFile)
- [WriteBytesToFile](#WriteBytesToFile)
@@ -663,6 +664,43 @@ func main() {
}
```
+### WriteCsvFile
+
+向csv文件写入内容。
+
+函数签名:
+
+```go
+func WriteCsvFile(filepath string, records [][]string, append bool) error
+```
+
+示例:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/duke-git/lancet/v2/fileutil"
+)
+
+func main() {
+ data := [][]string{
+ {"Lili", "22", "female"},
+ {"Jim", "21", "male"},
+ }
+ err := WriteCsvFile("./testdata/test2.csv", data, false)
+ fmt.Println(err)
+
+ content, _ := ReadCsvFile("./testdata/test2.csv")
+ fmt.Println(content)
+
+ // Output:
+ //
+ // [[Lili 22 female] [Jim 21 male]]
+}
+```
+
### WriteBytesToFile
diff --git a/fileutil/file.go b/fileutil/file.go
index ceea46d..db6fa6f 100644
--- a/fileutil/file.go
+++ b/fileutil/file.go
@@ -454,6 +454,28 @@ func ReadCsvFile(filepath string) ([][]string, error) {
return records, nil
}
+// WriteCsvFile write content to target csv file.
+// Play: todo
+func WriteCsvFile(filepath string, records [][]string, append bool) error {
+ flag := os.O_RDWR | os.O_CREATE
+
+ if append {
+ flag = flag | os.O_APPEND
+ }
+
+ f, err := os.OpenFile(filepath, flag, 0644)
+ if err != nil {
+ return err
+ }
+
+ defer f.Close()
+
+ writer := csv.NewWriter(f)
+ writer.Comma = ','
+
+ return writer.WriteAll(records)
+}
+
// WriteStringToFile write string to target file.
// Play: https://go.dev/play/p/GhLS6d8lH_g
func WriteStringToFile(filepath string, content string, append bool) error {
diff --git a/fileutil/file_example_test.go b/fileutil/file_example_test.go
index 6d7e147..79e30bf 100644
--- a/fileutil/file_example_test.go
+++ b/fileutil/file_example_test.go
@@ -276,7 +276,7 @@ func ExampleSha() {
}
func ExampleReadCsvFile() {
- content, err := ReadCsvFile("./testdata/test.csv")
+ content, err := ReadCsvFile("./testdata/demo.csv")
fmt.Println(content)
fmt.Println(err)
@@ -286,6 +286,22 @@ func ExampleReadCsvFile() {
//
}
+func ExampleWriteCsvFile() {
+ data := [][]string{
+ {"Lili", "22", "female"},
+ {"Jim", "21", "male"},
+ }
+ err := WriteCsvFile("./testdata/test2.csv", data, false)
+ fmt.Println(err)
+
+ content, _ := ReadCsvFile("./testdata/test2.csv")
+ fmt.Println(content)
+
+ // Output:
+ //
+ // [[Lili 22 female] [Jim 21 male]]
+}
+
func ExampleWriteStringToFile() {
filepath := "./test.txt"
diff --git a/fileutil/file_test.go b/fileutil/file_test.go
index acdec64..6f64f09 100644
--- a/fileutil/file_test.go
+++ b/fileutil/file_test.go
@@ -288,7 +288,7 @@ func TestSha(t *testing.T) {
func TestReadCsvFile(t *testing.T) {
assert := internal.NewAssert(t, "TestReadCsvFile")
- content, err := ReadCsvFile("./testdata/test.csv")
+ content, err := ReadCsvFile("./testdata/demo.csv")
assert.IsNil(err)
@@ -297,6 +297,29 @@ func TestReadCsvFile(t *testing.T) {
assert.Equal("Bob", content[0][0])
}
+func TestWriteCsvFile(t *testing.T) {
+ assert := internal.NewAssert(t, "TestWriteCsvFile")
+
+ csvFilePath := "./testdata/test1.csv"
+ content := [][]string{
+ {"Lili", "22", "female"},
+ {"Jim", "21", "male"},
+ }
+
+ err := WriteCsvFile(csvFilePath, content, false)
+ assert.IsNil(err)
+
+ readContent, err := ReadCsvFile(csvFilePath)
+
+ assert.IsNil(err)
+
+ assert.Equal(2, len(readContent))
+ assert.Equal(3, len(readContent[0]))
+ assert.Equal("Lili", content[0][0])
+
+ // RemoveFile(csvFilePath)
+}
+
func TestWriteStringToFile(t *testing.T) {
assert := internal.NewAssert(t, "TestWriteStringToFile")
diff --git a/fileutil/testdata/test.csv b/fileutil/testdata/test.csv
deleted file mode 100644
index 191054c..0000000
--- a/fileutil/testdata/test.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-Bob, 12, male
-Duke, 14, male
-Lucy, 16, female
\ No newline at end of file