r - R:获取目录中所有文件的短文件名(文件名)列表
问题描述
问题
list.files(Path)
返回目录中文件名的向量Path
。这很好,但我需要一个短文件名 (SFN) 向量。例如,WageDataFile.csv 的 SFN 是 WAGEDA~1.csv(如果目录中没有其他文件的词干为“WageDa”)。SFN 也称为 8.3 文件名。
所需的解决方案
具体来说,我希望有一个函数可以从操作系统中提取 SFN,而不是从 的输出中重建它list.files()
(但list.files()
也欢迎从 的输出中重建 SFN 的方法)。
可重现案例的代码
这将在“E:/FileNameTest”创建一组具有可变名称长度的文件:
setwd("E:/FileNameTest")
library(stringi)
nFiles = 12
minNameLength = 2
maxNameLength = 12
set.seed(1)
FileNames =
stri_rand_strings(nFiles,
length=sample(minNameLength:maxNameLength,nFiles,replace=T),
'[A-Za-z0-9]')
file.create(FileNames)
以下是 的内容FileNames
:
[1] "lUizNmvDe7" "GN0Nr" "LTbUBpfn" "6i" "Poe" "mYWm1Tjg"
[7] "TrRF46JWfPuI" "SKe" "FTl5sLqLKTtr" "OmxQ" "iO" "KkCi7F"
这是我从这些文件名中需要的 SFN 列表(编辑:缩短的名称应该全部大写):
[1] "6i" "FTL5SL~1" "GN0Nr" "iO" "KkCi7F" "LTbUBpfn" "LUIZNM~1" "mYWm1Tjg" "OmxQ"
[10] "Poe" "SKe" "TRRF46~1"
解决方案
这是一个解决方案(基于 MrFlick 的评论),它可能依赖于关于dir
. 具体来说,我假设输出的页眉和页脚总是分别占据 5 行和 2 行,并且dir /x/a:-d
输出中字段的宽度始终是恒定的。
library(stringr)
FileList = shell("dir /x/a:-d", intern=T)
FileList = FileList[6:(length(FileList)-2)]
SFN = str_replace(str_sub(FileList, 39, 46), " ", "")
Name = str_sub(FileList, 52, -1)
NameList = ifelse(str_length(SFN)>0, SFN, Name)
推荐阅读
- android - 使用 adb 授予对外部 sd 卡的写入权限
- python - 号码是添加而不是删除,我不知道为什么?
- javascript - 如何检查数字是否甚至在JavaScript中使用递归函数
- kubernetes - 将 ConfigMap“kubeadm-config”中使用的配置存储在“kube-system”命名空间中
- java - restTemplate 交换经常导致 400 错误
- amazon-web-services - Aws S3 etag 在 KMS 加密后与 md5 不匹配
- hibernate - 返回信息关系多对多
- json - 如何将字符串列表写为双引号,以便 json 可以加载?
- reactjs - Redux:异步/等待并处理事件
- python - 如何抓取生成了 html 数学符号的数据并将其准确转换为文本格式?