省略 txt 文件的最后一个行尾字符(R 中的 write.table)

Posted

技术标签:

【中文标题】省略 txt 文件的最后一个行尾字符(R 中的 write.table)【英文标题】:Omitting the final end-of-line character for txt file (write.table in R) 【发布时间】:2022-01-23 03:00:06 【问题描述】:

我有一个简单的 data.frame,我想使用 R 将其写入输出 .txt 文件。

示例代码:

my_df <- data.frame(name = c("Wendy", "Quinn"), age = c(23, 43))
write.table(my_df, file = "my_output_file.txt", sep = " ", col.names = F, row.names = F, quote = F, eol = "\n")

问题是我在 Notepad++ 中查看时得到以下输出文件(见截图)。我了解 eol = "\n" 参数在每行的末尾放置一个回车符——我希望将它用于这两行之间的行分隔,但 not 在文档的末尾。有没有一种方法可以省略最终的回车,导致我的 .txt 文件长 3 行而不是只有 2 行?

【问题讨论】:

【参考方案1】:

我不知道自动的方法,但试试这个:

my_df <- data.frame(name = c("Wendy", "Quinn"), age = c(23, 43))
write.table(my_df, file = "my_output_file.txt", sep = " ", col.names = F, row.names = F, quote = F, eol = "\n")

产生相同的输出:

但是这个

my_output <- capture.output(write.table(my_df, sep = " ", col.names = F, row.names = F, quote = F, eol = "\n"))
writeBin(paste(my_output, collapse = "\n"), "my_output_file2.txt")

产生这个:

【讨论】:

【参考方案2】:

你可以写出对象减去最后一行,然后在没有行尾的情况下追加它。

write.table(my_df[1:(nrow(my_df)-1),], file = "my_output_file.txt", 
  sep = " ", col.names = F, row.names = F, quote = F, eol = "\n")
write.table(my_df[nrow(my_df),], file = "my_output_file.txt", 
  sep = " ", col.names = F, row.names = F, quote = F, eol = "", append=T)

【讨论】:

以上是关于省略 txt 文件的最后一个行尾字符(R 中的 write.table)的主要内容,如果未能解决你的问题,请参考以下文章

sed匹配全行,行首,行尾后替换或添加字符

python实现读写txt文件

Vim 常用操作

shell脚本里怎么替换掉某个文件的最后一行的最后一个字符

Python txt读写(待)

linux常用命令