在R中有效地将反斜杠转换为正斜杠

Posted

技术标签:

【中文标题】在R中有效地将反斜杠转换为正斜杠【英文标题】:Efficiently convert backslash to forward slash in R 【发布时间】:2013-07-10 10:39:39 【问题描述】:

我正在寻找一种在 R 中将反斜杠转换为正斜杠的有效方法。有时我在 Windows 中复制目录的链接,得到如下结果:

C:\Users\jd\Documents\folder\file.txt

如何快速将其更改为 C:/Users/jd/Documents/folder/file.txt ?我什至无法将上述表达式读为字符。会报错

"\u 在以 ""C:\u" 开头的字符串中不使用十六进制数字。

我知道 R 中的 TAB 函数有助于快速找到位置,但我只是想知道是否还有其他解决方法。我也可以将工作目录更改为文件夹的位置。我只是在玩耍并试图将反斜杠转换为正斜杠并且不是直截了当的所以只是出于好奇而问这个。

【问题讨论】:

来自R 4.0.0,您可以使用r"(...)" 将路径写入原始字符串常量。见Escaping backslash () in string or paths in R 【参考方案1】:

在 R 中,您必须使用 \\ 转义 \ 所以,您的路径应该是:

x <- "C:\\Users\\jd\\Documents\\folder\\file.txt"

要做到这一点,你可以这样做:

x <- readline()

然后,在提示符下,粘贴您的 未修改 路径(CTRL+V 然后 ENTER)

最后,要将\\ 更改为/,您可以使用gsub,再次转义\,但两次,如下所示:

gsub("\\\\", "/", x)
# [1] "C:/Users/jd/Documents/folder/file.txt"

【讨论】:

感谢您的回答。我想将该反斜杠表达式更改为正斜杠的唯一原因是因为在 Windows 中,当我尝试复制特定正向的地址时,它只有一个反斜杠。现在,手动添加反斜杠将效率不高。现在,我明白复制根本行不通。 readClipboard() 是另一个选项,它会自动将复制文本中的反斜杠从一个转换为两个。 @thelatemail 谢谢,看来readClipboard() 是我要找的那个。 在我的机器上,路径被复制并带有双引号:"C:\Users\...\file.txt"。当我使用readline() 阅读此内容时,周围的引号被转义,字符串如下所示:"\"C:\\Users\\...\\file.txt\"",这将需要一个比您的答案中给出的更复杂的正则表达式才能将其转换为可用路径。如果你使用scan(what="character")而不是readline(),就可以避免这个问题。 在 RStudio 中,您可以从编辑器中运行以下命令:x &lt;- readline() C:\Users\jd\Documents\folder\file.txt,其中命令位于单独的行中。【参考方案2】:

如果您希望在粘贴路径时以最少的击键次数转换反斜杠,请使用定义如下的 RStudio snippet:

snippet pp
    "`r gsub('"', "", gsub("\\\\", "/", readClipboard()))`"

记得在第二行前加上一个制表符,而不是多个空格让 sn-p 起作用。

然后键入 ppTABENTER 并粘贴剪贴板上的文本,将反斜杠替换为正斜杠并用引号括起来。

一旦定义了上述 sn-p,我通常会采取以下步骤将文件路径复制到 RStudio:

    在资源管理器中导航到文件路径。 如果复制文件路径,则:Shift + 右键单击文件,然后单击复制为路径。 如果复制文件夹路径,则:Alt + dCtrl + c。 将窗口更改为 RStudio,并将焦点放在要粘贴路径的 R 脚本中。 ppTABENTER 粘贴到 RStudio 并将反斜杠转换为正斜杠。

【讨论】:

2 年后,我写了一个名为pp 的sn-p,并兴奋地回到这个问题,希望将其作为答案发布,结果却看到了这个:-( +1 我不明白你的 sn-p,特别是引号 ` 和第一个 gsub() 之外的引号 "。我用"`r gsub("\\\\", "/", readClipboard())`" gsub 和引号确保从资源管理器中的地址栏复制的路径(没有引号)和通过“复制为路径”复制的路径(有引号)都粘贴有引号包围他们。【参考方案3】:

我使用Path Copy Copy,它是Windows 的一个插件,允许您在Windows 中右键单击文件/文件夹时创建自定义复制命令。所以我的右键菜单有“用正斜杠复制完整路径”作为选项,它用正斜杠复制文件/文件夹。我猜它每年都会为我节省 ,从手动将斜杠更改为 R 格式。

【讨论】:

我认为这是所有答案中最省时的解决方案。【参考方案4】:

如果我理解正确,您确实想摆脱字符串编辑。为了能够使用gsub,您必须先手动将所有\ 更改为\\。那么,为什么不首先将\ 更改为/

如果剪贴板中有字符串,则可以使用

  x=scan("clipboard",what="string")

这给了

  "C:\\Users\\jd\\Documents\\folder\\file.txt"

也就是说,它会自动将所有\ 转换为\\。 我知道 - 不是很方便,但我知道绕过编辑的唯一方法。

【讨论】:

顺便说一句:“剪贴板”是指您使用 CTRL+V 复制的内容。 当我的文件夹名称用空格分隔时,我没有得到预期的结果。例如C:\Users\jd\Documents\my country\my name\file.txt. 嗯...好点。您可以使用不同的分隔符x=scan("clipboard",what="string",sep=";")。我将其更改为;。我相信文件路径中不允许使用分号,对吧?因此,选择分号作为分隔符是安全的。【参考方案5】:

我喜欢使用具有'Convert slash'功能的RStudio插件snippetsaddin:

它将反转所选代码块中的所有斜杠,或者如果没有选择(或仅选择空格),它将反转剪贴板中的所有斜杠并将其粘贴到当前光标(s ) 个职位。

插件像包一样安装。要安装这个,请执行以下操作:

devtools::install_github("sfr/RStudio-Addin-Snippets", type = "source")

【讨论】:

【参考方案6】:

自动热键程序:

^+v::
StringReplace, clipboard, clipboard, \,/,All
send %clipboard%

control+c文件路径后,使用control+shift+v粘贴

【讨论】:

【参考方案7】:

这是从剪贴板转换地址的一步法

x  <- gsub  ( "\\\\",  "/",  readClipboard ()  ) 

【讨论】:

【参考方案8】:

没有sn-p定义的解决方案是

writeClipboard(gsub("\\\\", "/", readClipboard()))

【讨论】:

【参考方案9】:

我认为摆脱麻烦的最好方法是在 Rstudio 的右侧面板中找到文件。然后单击“更多”并单击“设置为工作目录”。然后您将在控制台中看到“setwd(...)”。您可以将其复制到您的代码中。

【讨论】:

这不是很有效。这意味着更改每个文件的工作目录。

以上是关于在R中有效地将反斜杠转换为正斜杠的主要内容,如果未能解决你的问题,请参考以下文章

如何将反斜杠替换为字符串Python中的不同字符

将反斜杠更改为正斜杠会更改文件大小

将反斜杠更改为双反斜杠

单引号是不是将反斜杠视为 bash 脚本中的特殊字符?

在 Windows 批处理文件中将反斜杠更改为正斜杠

在选择器中转义反斜杠