R을 사용하여 지정된 확장자를 가진 모든 파일 나열


137

저는 R을 처음 사용하고 ArcGIS를 사용하여 만든 일련의 .dbf 테이블을 반복하고 일련의 그래프를 생성하기 위해 R 스크립트를 업데이트하는 중입니다.

모든 .dbf 파일을 포함하는 C : \ Scratch 디렉토리가 있습니다. 그러나 ArcGIS가 이러한 테이블을 생성 할 때 .dbf.xml 파일도 포함됩니다. 내 .dbf.xml 파일을 내 파일 목록에서 제거하여 반복하고 싶습니다. 나는 정규 표현식을 검색하고 실험 해 보았습니다. 이것은 내가 사용하는 기본 표현입니다 (다양한 실험 모두 제외).

files <- list.files(pattern = "dbf")

누구든지 나에게 방향을 줄 수 있습니까?


1
정규 표현식으로 어려움을 겪고 있지만 와일드 카드 패턴을 알고 있다면 함수 glob2rx()가 종종 도움이됩니다.
caracal

그것은 단지 나입니까, 아니면 오해의 소지가 있습니다 : "특정 확장명 만"을 읽어야합니다 (그러나 특정 확장명을 제외시키는 것에 대한 답변을 찾을 수 없습니다)
J. Win.

스라소니, 제안 주셔서 감사합니다. jonw, 나는 그것을 간결하게 말했을 수 있다고 생각합니다. 회의 전에 게시하려고했습니다.
chawkins

regexp에 대해 배우면서 쉽게 배제 할 수있는 방법이 있는지 궁금해졌습니다. 별도의 질문이 필요할 수도 있습니다.
J. Win.

답변:


198
files <- list.files(pattern = "\\.dbf$")

$끝에는 이것이 문자열의 끝임을 의미합니다. "dbf$"또한 작동하지만 \\.( .정규 표현식의 특수 문자이므로 이스케이프해야 함) 추가 .dbf하면 확장자가있는 파일 만 일치해야합니다 (예 : .adbf파일 이있는 경우 ).


1
대소 문자를 구분합니까?
nsn

6
@nsn 예, 그러나 달리 원한다면 ignore.case함수의 인수가 list.files(pattern = "\\.dbf$", ignore.case=TRUE)있습니다. ?list.files자세한 내용 은 해당 기능에 대한 도움말 페이지 ( )를 참조하십시오.
Marek

61

정규 표현식 대신 glob를 사용하여 시도하십시오. 따라서 끝나는 파일 이름 만 선택합니다. .dbf

filenames <- Sys.glob("*.dbf")

12

문자를 "\\.dbf"사용하여 문자열 끝에서 찾을 패턴을 페그하십시오 $.

list.files(pattern = "\\.dbf$")

1
점이 파일 확장자의 점을 의미하는 경우 작동하지 않습니다. 정규식에서 도트는 단일 문자와 일치합니다.
Marek

@Marek도 방금 주목했습니다. 내 카페인 매장량은 임계 값 아래로 떨어졌을 것입니다.
Gavin Simpson

흠 .. \` escape the 지금 추가했습니다 . 그래서 왜 이것이 다운 다운되었는지 궁금해합니까?
Gavin Simpson

8

정교한 정규 표현식을 사용하는 데별로 좋지 않으므로 다음과 같은 방법으로 이러한 작업을 수행합니다.

files <- list.files()
dbf.files <- files[-grep(".xml", files, fixed=T)]

첫 번째 줄은 작업 디렉토리의 모든 파일을 나열합니다. 두 번째는 ".xml"을 포함하는 모든 항목을 삭제합니다 (grep은 'files'벡터에 이러한 문자열의 색인을 반환합니다. 음수 색인을 사용하여 하위 설정하면 벡터에서 해당 항목이 제거됩니다). grep 함수에 대한 "고정 된"논증은 저의 변덕입니다. 나는 보통 Perl 스타일의 멋진 정규 표현식없이 조잡한 패턴 일치를 수행하기를 원하기 때문에 놀랍습니다.

나는 그러한 해결책이 단순히 내 교육의 단점을 반영한다는 것을 알고 있지만 초보자에게는 유용 할 수 있습니다.


1
-전에 부호를 제거해야합니다 grep. zip 파일에서 특정 파일을 추출하려면 이러한 종류의 솔루션이 필요했습니다. 먼저 data.frame에서 파일 목록을 가져 와서 특정 파일을 가져 와서 나중에 추출하십시오. lf <- unzip(file, list=T)[,1]; files.shp <- lf[grep(".shp", lf, fixed=T)]
Sezen

5

전체 경로가있는 파일 목록을 제공합니다.

  Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory

긴 라이브 sys.glob!
shadi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.