为什么 "fmt.Sprintf("%v,", lines[i])" 将逗号放在新行上?
Why does "fmt.Sprintf("%v,", lines[i])" put the comma on new line?
这是完整代码:
files, _ := ioutil.ReadDir("files")
for _, f := range files {
input, err := ioutil.ReadFile("files/" + f.Name())
lines := strings.Split(string(input), "\n")
for i, _ := range lines {
lines[i] = fmt.Sprintf("%v,", lines[i])
}
output := strings.Join(lines, "\n")
err = ioutil.WriteFile("files/"+f.Name()+"fix", []byte(output), 0644)
if err != nil {
log.Fatalln(err)
}
}
我假设这是因为 lines[i] 必须在字符串末尾包含一个换行符字节。我试图删除它但失败了。
我加载的文件只是 json 个文件,例如
第 1 行:{ "foo":"bar","baz":null }
第 2 行:{ "foo":"bar","baz":"quz" }
我试图在所有行的末尾添加一个逗号..任何帮助将不胜感激
为了让自己更清楚一点,我现在得到的是:
{ "foo":"bar","baz":null }
,
{ "foo":"bar","baz":"quz" }
,
而我想要得到的是:
{ "foo":"bar","baz":null },
{ "foo":"bar","baz":"quz" },
您的 JSON 数据是否可能来自 Windows 并且实际上包含 /r/n 而不仅仅是 /n?
您可以在 this playground example 中使用 /r/n 看到此行为:
package main
import (
"fmt"
"strings"
)
func main() {
a := "test\r\nnewtest\r\ntest2"
b := strings.Split(a, "\n")
c := strings.Join(b, ",\n")
fmt.Printf("%v", c)
}
尝试修剪该行以清除它具有的任何尾随 unicode 代码点:
import "strings"
// ...
for _, line := range lines {
line = fmt.Sprintf("%v,", strings.Trim(line, " \r\n"))
}
这是完整代码:
files, _ := ioutil.ReadDir("files")
for _, f := range files {
input, err := ioutil.ReadFile("files/" + f.Name())
lines := strings.Split(string(input), "\n")
for i, _ := range lines {
lines[i] = fmt.Sprintf("%v,", lines[i])
}
output := strings.Join(lines, "\n")
err = ioutil.WriteFile("files/"+f.Name()+"fix", []byte(output), 0644)
if err != nil {
log.Fatalln(err)
}
}
我假设这是因为 lines[i] 必须在字符串末尾包含一个换行符字节。我试图删除它但失败了。
我加载的文件只是 json 个文件,例如
第 1 行:{ "foo":"bar","baz":null }
第 2 行:{ "foo":"bar","baz":"quz" }
我试图在所有行的末尾添加一个逗号..任何帮助将不胜感激
为了让自己更清楚一点,我现在得到的是:
{ "foo":"bar","baz":null }
,
{ "foo":"bar","baz":"quz" }
,
而我想要得到的是:
{ "foo":"bar","baz":null },
{ "foo":"bar","baz":"quz" },
您的 JSON 数据是否可能来自 Windows 并且实际上包含 /r/n 而不仅仅是 /n?
您可以在 this playground example 中使用 /r/n 看到此行为:
package main
import (
"fmt"
"strings"
)
func main() {
a := "test\r\nnewtest\r\ntest2"
b := strings.Split(a, "\n")
c := strings.Join(b, ",\n")
fmt.Printf("%v", c)
}
尝试修剪该行以清除它具有的任何尾随 unicode 代码点:
import "strings"
// ...
for _, line := range lines {
line = fmt.Sprintf("%v,", strings.Trim(line, " \r\n"))
}