diff --git a/docs/fileutil.md b/docs/fileutil.md index 951cc8a..89ee54f 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) @@ -503,7 +504,6 @@ func main() { } ``` - ### IsZipFile
Checks if file is zip file or not.
@@ -664,6 +664,42 @@ 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/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: + //Writes string to target file.
@@ -738,28 +773,28 @@ import ( func main() { filepath := "./test.txt" - file, err := os.Create(filepath) - if err != nil { - return - } + file, err := os.Create(filepath) + if err != nil { + return + } - defer file.Close() + defer file.Close() - err = fileutil.WriteStringToFile(filepath, "hello", true) - if err != nil { - return - } + err = fileutil.WriteStringToFile(filepath, "hello", true) + if err != nil { + return + } - content, err := fileutil.ReadFileToString(filepath) - if err != nil { - return - } + content, err := fileutil.ReadFileToString(filepath) + if err != nil { + return + } - os.Remove(filepath) + os.Remove(filepath) - fmt.Println(content) + fmt.Println(content) - // Output: - // hello + // Output: + // hello } -``` \ No newline at end of file +``` diff --git a/docs/fileutil_zh-CN.md b/docs/fileutil_zh-CN.md index ab8e673..e4dabce 100644 --- a/docs/fileutil_zh-CN.md +++ b/docs/fileutil_zh-CN.md @@ -43,6 +43,7 @@ import ( - [MTime](#MTime) - [Sha](#Sha) - [ReadCsvFile](#ReadCsvFile) +- [WriteCsvFile](#WriteCsvFile) - [WriteStringToFile](#WriteStringToFile) - [WriteBytesToFile](#WriteBytesToFile) @@ -503,7 +504,6 @@ func main() { } ``` - ### IsZipFile判断文件是否是zip压缩文件。
@@ -664,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: + //将bytes写入文件。
@@ -687,33 +724,32 @@ import ( func main() { filepath := "./bytes.txt" - file, err := os.Create(filepath) - if err != nil { - return - } + file, err := os.Create(filepath) + if err != nil { + return + } - defer file.Close() + defer file.Close() - err = fileutil.WriteBytesToFile(filepath, []byte("hello")) - if err != nil { - return - } + err = fileutil.WriteBytesToFile(filepath, []byte("hello")) + if err != nil { + return + } - content, err := fileutil.ReadFileToString(filepath) - if err != nil { - return - } + content, err := fileutil.ReadFileToString(filepath) + if err != nil { + return + } - os.Remove(filepath) + os.Remove(filepath) - fmt.Println(content) + fmt.Println(content) - // Output: - // hello + // Output: + // hello } ``` - ### WriteStringToFile将字符串写入文件。
@@ -737,28 +773,28 @@ import ( func main() { filepath := "./test.txt" - file, err := os.Create(filepath) - if err != nil { - return - } + file, err := os.Create(filepath) + if err != nil { + return + } - defer file.Close() + defer file.Close() - err = fileutil.WriteStringToFile(filepath, "hello", true) - if err != nil { - return - } + err = fileutil.WriteStringToFile(filepath, "hello", true) + if err != nil { + return + } - content, err := fileutil.ReadFileToString(filepath) - if err != nil { - return - } + content, err := fileutil.ReadFileToString(filepath) + if err != nil { + return + } - os.Remove(filepath) + os.Remove(filepath) - fmt.Println(content) + fmt.Println(content) - // Output: - // hello + // Output: + // hello } ``` diff --git a/fileutil/file.go b/fileutil/file.go index 4ab9c22..185af9b 100644 --- a/fileutil/file.go +++ b/fileutil/file.go @@ -370,7 +370,7 @@ func MTime(filepath string) (int64, error) { return f.ModTime().Unix(), nil } -// MTime returns file sha value, param `shaType` should be 1, 256 or 512. +// Sha returns file sha value, param `shaType` should be 1, 256 or 512. func Sha(filepath string, shaType ...int) (string, error) { file, err := os.Open(filepath) if err != nil { @@ -420,6 +420,27 @@ func ReadCsvFile(filepath string) ([][]string, error) { return records, nil } +// WriteCsvFile write content to target csv file. +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. func WriteStringToFile(filepath string, content string, append bool) error { flag := os.O_RDWR | os.O_CREATE diff --git a/fileutil/file_test.go b/fileutil/file_test.go index b186567..105bf7b 100644 --- a/fileutil/file_test.go +++ b/fileutil/file_test.go @@ -268,7 +268,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") t.Log(content) assert.IsNil(err) @@ -278,6 +278,27 @@ 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]) +} + func TestWriteStringToFile(t *testing.T) { assert := internal.NewAssert(t, "TestWriteStringToFile") diff --git a/fileutil/testdata/test.csv b/fileutil/testdata/demo.csv similarity index 100% rename from fileutil/testdata/test.csv rename to fileutil/testdata/demo.csv diff --git a/fileutil/testdata/test1.csv b/fileutil/testdata/test1.csv new file mode 100644 index 0000000..c8961e7 --- /dev/null +++ b/fileutil/testdata/test1.csv @@ -0,0 +1,2 @@ +Lili,22,female +Jim,21,male