일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Deep learning
- data science
- No SQL
- Statistics
- openCV
- 주일설교
- nodeJS
- 확률
- 빅데이타
- R
- 우리들교회
- 김양재
- 빅 데이타
- 빅데이터
- Artificial Intelligence
- Machine Learning
- WebGL
- node.js
- c++
- 딥러닝
- 김양재 목사님
- 데이터 과학
- 통계
- 김양재 목사
- 몽고디비
- probability
- 인공지능
- MongoDB
- 빅 데이터
- Big Data
- Today
- Total
Scientific Computing & Data Science
[Data Science / Posts] R에서 Directory 내 파일명 일괄 변경 본문
이번 글에서는 R에서 지정된 Directory 내의 파일들을 일정 포맷으로 일괄적으로 변경하는 팁을 설명하고자 한다.
가령, 아래 이미지와 같이 "Test" Directory 내에 파일들이 다음과 같이 존재한다고 가정하자.
[./Test/]
위의 해당 Directory 내의 파일들을 아래 이미지와 같이 일괄 변경하는 R 코딩을 한다고 가정한다.
즉, "Air-"를 "Water_"로 변경하였고, "001"로 시작하는 Index를 "007"로 시작하도록 하였다.
Directory 내 파일 모두 불러오기
특정 Directory(Path)를 지정하는 변수를 basePath 라고 하고 하고, fileList 변수에 해당 경로의 파일들을 모두 불러오려면 다음과 같이 코드를 작성한다.
fileList <- list.files(basePath, pattern = NULL, all.files = TRUE);
fileList에 저장되는 내용은 다음과 같다:
> basePath = "./Test"
> fileList <- list.files(basePath, pattern = NULL, all.files = TRUE)
> fileList
[1] "." ".." "Air-001.jpg" "Air-002.jpg" "Air-003.jpg" "Air-004.jpg" "Air-005.jpg"
[8] "Air-006.jpg" "Air-007.jpg" "Air-008.jpg" "Air-009.jpg" "Air-010.jpg" "Air-011.jpg" "Air-012.jpg"
[15] "Air-013.jpg
실제 파일명이 저장되는 Index는 3부터임을 주목하도록 한다.
즉,
> fileList[3]
[1] "Air-001.jpg"
기존 파일명 정의
R의 파일명 변경(Rename)을 하는 Built-in 함수는 file.rename인데, 입력 파라미터로 기본적으로 요구되는 것이 기존 파일명과 변경될 파일명이다.
기존 파일명과 변경될 파일명 모두 단순 파일명이 아닌 해당 Directory의 Path가 포함되어야 한다.
따라서, R의 빌트-인(Built-in) 함수인 paste()를 이용하여 기존 파일명은 해당 Directory의 경로와 그 경로 내 파일명을 결합하도록 한다.
가령, i-번째 Index의 파일에 대한 전체 경로를 얻으려면
prevFileName <- fileList[i];
prevFileName <- paste(basePath, prevFileName, sep = "", collapse = NULL);
과 같이 코드를 작성한다.
변경할 파일명 정의
변경할 파일명 역시 해당 Directory의 Path를 포함해야 한다.
가령,
newFileName <- sprintf("%s%03d.jpg", baseFileName, fromIdx);
newFileName <- paste(basePath, newFileName, sep = "", collapse = NULL);
과 같이 코드를 작성하면 된다.
sprintf()는 C-style의 텍스트 포맷팅 함수이며, fromIdx는 변경할 파일의 시작 Index를 명시한 변수이다.
파일명 변경
file.rename() 함수를 이용하여 파일명을 변경한다.
file.rename(from = prevFileName, to = newFileName);
이제 파일명을 일괄 변경하는 함수(FileNameChanger)에 대한 전체 코드를 공개한다.
FileNameChanger = function( basePath, baseFileName, fromIdx ) {
fileList <- list.files(basePath, pattern = NULL, all.files = TRUE);
for(i in 3:length(fileList)) {
prevFileName <- fileList[i];
prevFileName <- paste(basePath, prevFileName, sep = "", collapse = NULL);
newFileName <- sprintf("%s%03d.jpg", baseFileName, fromIdx);
newFileName <- paste(basePath, newFileName, sep = "", collapse = NULL);
file.rename(from = prevFileName, to = newFileName);
fromIdx <- fromIdx + 1;
}
}
앞 부분에서 설명한 바와 같이, "Air-"를 "Water_"로 변경하였고, "001"로 시작하는 Index를 "007"로 시작하도록 하려면,
source("./FileNameChanger.R")
basePath = "./Test/"
baseFileName = "Water_"
FileNameChanger(basePath, baseFileName, 7)
을 실행하면 된다.
'Data Science > Posts' 카테고리의 다른 글
[Data Science / Posts] 데이터 과학이란 무엇인가? 이 질문에 대한 24가지 기본적 답변 (0) | 2017.01.05 |
---|---|
[Data Science / Posts] 머신러닝, 데이터과학, AI, 딥러닝, 통계학 사이의 차이점 (2) | 2017.01.05 |
[Data Science] 데이터 과학자의 역할 (0) | 2015.01.23 |
[Data Science] Data Science Process (0) | 2015.01.18 |
[Data Science / Posts] Big Data에 대한 생각 (0) | 2015.01.10 |