免责声明:运行下面的代码可能会对你的电脑和文件造成不可恢复的损害,请确认明白代码的意义后再运行! 本主对代码运行后果不负任何责任。

1 基本函数

1.1 文件操作函数

这类函数很多,下面列出的是基本安装包(base)中的一些:

ls("package:base", pattern="^file\\.")
##  [1] "file.access"  "file.append"  "file.choose"  "file.copy"
##  [5] "file.create"  "file.exists"  "file.info"    "file.link"
##  [9] "file.mode"    "file.mtime"   "file.path"    "file.remove"
## [13] "file.rename"  "file.show"    "file.size"    "file.symlink"

常用的有:

  • file.exists:检查文件是否存在
  • file.copy:文件拷贝
  • file.remove:文件删除
  • file.rename:文件重命名
  • file.size:获取文件大小(B)
  • file.info:获取文件信息(包括文件大小),结果为列表或数据框
  • file.path:构造文件路径

但最常用的一个函数可能是list.files,此函数的作用是列出指定目录(路径)中的文件:

str(list.files)
## function (path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE,
##     recursive = FALSE, ignore.case = FALSE, include.dirs = FALSE,
##     no.. = FALSE)
  • path:文件路径,默认为“.”,即当前工作目录(getwd()获得)
  • pattern:文件名过滤模式,使用正则表达式
  • all.files:是否列出所有文件(含隐藏文件)
  • full.names:文件名是否以包含文件路径的“全名”形式表示
  • recursive:是否递归查找目录(查找子目录)
  • ignore.case:指定的模式(pattern参数)是否忽略大小写
  • include.dirs:是否包含目录名(多数系统认为“目录”也是“文件”)

1.2 字符(串)操作函数

这里仅介绍两个:gsub和strsplit。

我们将用gsub这个函数从文件名中提取需要的信息。它的用法是:

str(gsub)
## function (pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
##     fixed = FALSE, useBytes = FALSE)
  • pattern:查找模式,使用正则表达式
  • replacement:替换模式,可使用正则表达式
  • x:待处理的字符(串)向量
  • ignore.case:指定的模式(pattern参数)是否忽略大小写
  • fixed:模式(pattern参数)不使用正则表达式

strsplit的作用是使用指定分隔符切割字符串:

str(strsplit)
## function (x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)

它的结果是一个列表,如果应用于字符串向量,最好是结合apply函数使用:

xnames <- c("T-1-a", "T-2-b")
strsplit(xnames, "-")
## [[1]]
## [1] "T" "1" "a"
##
## [[2]]
## [1] "T" "2" "b"
apply(cbind(xnames), 1, FUN = function(x) strsplit(x, "-")[[1]])
##      [,1] [,2]
## [1,] "T"  "T"
## [2,] "1"  "2"
## [3,] "a"  "b"

2 从文件名提取信息

可以使用strsplit函数。例如获取文件扩展名:

ffs <- list.files(pattern = "\\.")
apply(cbind(ffs), 1, FUN = function(x) rev(strsplit(x, "\\.")[[1]])[1])

当然也可以使用gsub函数:

gsub("^.+\\.([^\\.]+$)", "\\1", ffs)

想要从文件名中提取出有用信息,首先文件名中得存在有用信息,而这得取决于你的文件命名习惯。如果你是做科学的人,建议文件名中包含样品、重复、时间等信息。使用一定的规则命名文件,这在后期数据处理中非常有用。

3 批量重命名文件

基本过程是:

  • 用list.files函数获取原文件名
  • 构造新文件名
  • 用file.rename重命名文件

下面代码把当前目录下的Temp子目录下的txt文件用编号进行重命名:

ffo <- list.files(path="Temp", pattern = "\\.txt", full.names = TRUE)
if ( length(ffo) > 0) {ffn <- paste0(1:length(ffo), ".txt")ffn <- file.path("Temp", ffn)file.rename(ffo, ffn)
}

下面的代码把当前目录下的文件名的扩展名转成大写:

ffo <- list.files(pattern = "\\..+$")
fs1 <- gsub("^(.+\\.)([^\\.]+$)", "\\1", ffo)
fs2 <- gsub("^(.+\\.)([^\\.]+$)", "\\2", ffo)
ffn <- paste0(fs1, toupper(fs2))
file.rename(ffo, ffn)

4 批量选择和删除文件

可根据文件信息选择文件,然后再删除。这时候file.info函数就很有用了:

xsel <- file.info(ffs)$size < 10
if (sum(xsel) > 0) file.remove(ffs[xsel])

5 批量读取文件数据

通常使用for循环进行读取,例如:

dtx <- NULL
for (ff in ffs) dtx <- cbind(dtx, read.csv(ff))
colnames(dtx) <- ffs

但这同样取决于你的文件和数据。文件名的命名要讲究规律,存储格式也要标准化!如果做不到这一点,请不要说你在做科学。


作者: ZGUANG@LZU

Created: 2018-10-24 三 10:29

如何使用R批量处理文件相关推荐

  1. 用Python在Windows或Linux下批量删除文件夹中指定的文件

    情况说明:当在一个文件夹下面有好几十个或几百个文件需要删除,此时一一去挑选费时费力,特别是在Linux下面.因此,需要批量删除文件. 对训练样本(图像)和测试样本(图像)进行评估时候,需要查看是数据本 ...

  2. python在当前目录创建txt文件-python根据txt文本批量创建文件夹

    前言 前言:想写这个代码的原因是因为实习的时候需要根据表格名创建对应的文件夹,如果只是很少个数文件夹的话,ctrl+shift+n还可以接受吧,可是一次就要创建几百个文件夹,这就有点方方了.所以我写了 ...

  3. python批量下载文件-Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  4. python批量下载网页文件-Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  5. linux sed给空文件首行插入_linux下批量修改文件后缀名以及合并多行

    写在前面 感谢乔兄送测的公司,让我终于所有营业 part1讲下怎么解决小问题 part2分享谈判过程 part3mark张兄的奶茶 PART1 linux下批量修改文件后缀名以及合并多行 近期师兄在做 ...

  6. python批量新建文件夹_python批量创建指定名称的文件夹

    本文实例为大家分享了python批量创建指定名称的文件夹具体代码,供大家参考,具体内容如下 继删除多余文件之后,做了一些数据处理,需要重新保存数据,但文件夹的名称又不能改 所以只能创建新的文件夹,换个 ...

  7. python读取文件名存到list_批量读取文件夹中的文件名

    问题:批量读取文件夹中的文件名 方法1 Windows批处理方法 在文件夹下新建一个txt文本文档,写入: DIR *.* /B >LIST.TXT 保存后修改文件名后缀为.bat,双击运行后, ...

  8. python 删除n天前文件_Linux 按时间批量删除文件命令(删除N天前文件)

    Linux常用命令总结 1.系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系 ...

  9. mac+修改+ssh文件夹权限_用SSH指令批量修改文件夹 文件权限和拥有者

    在linux系统下或登录ssh可以批量修改文件权限 wwwroot目录下的所有目录的权限递归设置为755 cd wwwroot find -type d -exec chmod 755 {} \; 或 ...

最新文章

  1. Asp.Net web.config配置节点大全详解
  2. 【Python刷题】_4
  3. javaweb_JSP 中文字符处理程序
  4. SVN 创建仓库操作
  5. C#编程(四十八)----------列表
  6. Java基础知识之数组的初始化和基本操作
  7. python中的*和**参数:nn.Sequential(*layers)
  8. Vue学习笔记----基础
  9. 凯撒密码(凯撒移位)
  10. 【保姆级手写理解——灰色预测理论以及python实现】
  11. openStreetMap数据分析举例-使用Qt统计城市科技指数排名
  12. Spring中FrameMaker中文乱码
  13. Office2016打开文件提示“文件已损坏”,WPS打开却正常的解决办法
  14. 软考 软件设计师 第五版+历年真题
  15. 520还在画玫瑰?教你用MATLAB画个玫瑰花球
  16. 2019金华正睿集训总结
  17. 如何在电脑端写qq看点文章?如何在电脑端找QQ看点
  18. pytorch Vocab
  19. [CortexM--CMSIS]详细的说明
  20. 单链表的从小到大排序

热门文章

  1. iOS OC 计算代码执行耗时
  2. jsp学生体育成绩管理系统
  3. 不干正事儿系列文章1:Sonic Pi简单应用
  4. 夜神模拟器——vscode调试模拟器找不到模拟器
  5. 商务口语 - 意见分歧话题
  6. [渝粤教育] 浙江大学 2021秋冬微积分(一) 参考 资料
  7. 【技术干货】聊聊在大厂推荐场景中embedding都是怎么做的
  8. 理不清薪酬,更心愁 穆穆-movno1
  9. 史上最详细的新浪广告系统技术架构优化历程
  10. CPU缓存体系对Go程序的影响