如何从golang中删除\ n?

时间:2017-06-09 02:34:21

标签: parsing go lines

# The flow: models2.objects.filter(model1_id__in = md1_ids)
# And you want to get model3 ? ~> need ids to query
# ~> Query 1: 
md3_ids = models2.objects.filter(model1_id__in = md1_ids).values_list("model3_id", flat="true")
md3 = Models3.objects.filter(pk__in md3_ids)

结束它在每一行添加\ n,结束程序才能工作,只能使用最后一行......

请举例,我尝试任何结束任何解决方案,我发现这里不适合我。

2 个答案:

答案 0 :(得分:24)

你可以切掉最后一个角色:

read_line = read_line[:len(read_line)-1]

也许更好的方法是使用字符串库:

read_line = strings.TrimSuffix(read_line, "\n")

答案 1 :(得分:5)

如果您想逐行阅读文件,使用bufio.Scanner会更容易。扫描程序不会在行中包含endline\n\r\n)。

file, err := os.Open("yourfile.txt")
if err != nil {
    //handle error
    return
}
defer file.Close()

s := bufio.NewScanner(file)
for s.Scan() {
    read_line := s.Text()

    // other code what work with parsed line...
}

如果您要删除endline,我建议您使用TrimRightFunc,即

read_line = strings.TrimRightFunc(read_line, func(c rune) bool {
    //In windows newline is \r\n
    return c == '\r' || c == '\n'
})

<强>更新
正如@GwynethLlewelyn指出的那样,使用TrimRight会更简单(更清晰),即

 read_line = strings.TrimRight(read_line, "\r\n")

在内部,TrimRight函数调用TrimRightFunc,如果字符与作为TrimRight的第二个参数给出的任何字符匹配,则删除该字符。