我正在努力将Windows文件名/路径转换为unix格式,反之亦然。
我的问题,我在Windows中有一个工具,它生成一个参数文件,其中包含Windows格式的文件路径(有时是多个文件),例如C:\Users\cf\Desktop\my.fasta;C:\Users\cf\Desktop\ecoli.fasta
。我通常将这些字符串拆分为;
以获取文件名列表。
我在unix系统上开发我的脚本,因此像basename
这样的函数不适用于这样的路径。此路径也不会被识别为不同的文件夹。此外,我编写的脚本应该在Windows和Unix系统上运行,所以我需要能在两台机器上运行的东西。
有没有办法处理两种操作系统类型中的文件名,或者我可以在str_split
和gsub
旁边使用的其他功能,并手动创建路径?
答案 0 :(得分:0)
我在r中没有遇到过这种问题,但我认为您可以使用以下函数来拆分“;” - 分隔的路径列表,并用特定于unix的路径替换路径的特定于窗口的部分部分。
get.paths <- function(paths)
{
file_names <- strsplit(paths, ";")[[1]]
if (Sys.info()[["sysname"]] != "Windows")
{
file_names <- gsub('\\\\', '/', file_names)
file_names <- gsub('C:/Users/', '/mnt/windows_data/', file_names)
}
file_names
}
这将返回一个带有适合您正在运行的系统的路径的向量。示例(在unix上):
paths <- "C:\\Users\\cf\\Desktop\\my.fasta;C:\\Users\\cf\\Desktop\\ecoli.fasta"
get.paths(paths)
[1] "/mnt/windows_data/cf/Desktop/my.fasta" "/mnt/windows_data/cf/Desktop/ecoli.fasta"
(和windows):
paths <- "C:\\Users\\cf\\Desktop\\my.fasta;C:\\Users\\cf\\Desktop\\ecoli.fasta"
get.paths(paths)
[1] "C:\\Users\\cf\\Desktop\\my.fasta" "C:\\Users\\cf\\Desktop\\ecoli.fasta"
希望这就是你所需要的。