【问题标题】:How to get fwrite() not to double quotes?如何让 fwrite() 不使用双引号?
【发布时间】:2023-03-19 20:08:01
【问题描述】:

我使用fread 读取了一个在其字段中包含html 代码的csv 文件,对其进行了一些维护并使用fwrite 将生成的数据表写入文件。问题是现在所有的 html 都用四引号填充,例如colspan="""""7""""。有 qmethod 参数,但我不知道如何使用它,因为我也不想用反斜杠转义引号。

是否可以避免这种情况,或者我必须使用 sed 吗?

例如,我得到了 csv 文件:

htmlcode,id
<colspan="7">,1
<colspan="8">,2

我用fread 将其读入数据表,我删除了id 列并将数据表用fwrite 写回csv 文件我得到:

htmlcode
<colspan=""""7"""">
<colspan=""""8"""">

【问题讨论】:

  • 我实际上并没有完全理解您的问题,但会使用gsub" 的多次出现替换为单个" 工作吗?
  • FWIW base64 编码 HTML“字段”通常比以原始形式存储要好得多,除非我们谈论的是数据库“blob”或 WARC 文件。

标签: r data.table


【解决方案1】:

两种可能的解决方案(使用 data.tablev1.10.0):

1:使用quote = FALSE参数:

fwrite(dt, 'fwrite.csv', quote = FALSE)

在文本编辑器中打开文件时,您会看到:

htmlcode
<colspan="7">
<colspan="8">

2:将双括号替换为单括号(同样由 cmets 中的@joel.wilson 建议):

dt[, htmlcode := gsub('\"', '\'', htmlcode)]
fwrite(dt, 'fwrite.csv')

在文本编辑器中打开文件时,您会看到:

htmlcode
<colspan='7'>
<colspan='8'>

【讨论】:

  • 实际上 quote=FALSE 仍然将引号加倍,即 ""7"" 而不是 "7"
  • @ChiseledAbs 在我的电脑上没有(macOS);你使用的是哪个版本的data.table
  • Linux 上的 1.10.0,可能是因为整个字段都用引号括起来,例如 "&lt;colspan="8"&gt;"。你知道如何解决这个问题还是我必须进行替换?
  • @ChisledAbs 我现在唯一能想到的其他选项是将qmethod-参数设置为escapedouble,看看会发生什么。
猜你喜欢
  • 2012-03-22
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多