Ich habe eine Datei
ABCD.csv
Die Länge vor dem .csv
ist nicht festgelegt und variiert zu jeder Länge.
Wie kann ich die Portion vor dem extrahieren .csv
.
Ich habe eine Datei
ABCD.csv
Die Länge vor dem .csv
ist nicht festgelegt und variiert zu jeder Länge.
Wie kann ich die Portion vor dem extrahieren .csv
.
Antworten:
Es gibt einen eingebauten in file_path_sans_ext
der Standard - Installation von Tools - Paket , das die Datei ohne die Erweiterung packt.
tools::file_path_sans_ext("ABCD.csv")
## [1] "ABCD"
basename
entfernt auch den Pfad, der zur Datei führt. Und mit dieser Regex wird jede Erweiterung entfernt.
filepath <- "d:/Some Dir/ABCD.csv"
sub(pattern = "(.*)\\..*$", replacement = "\\1", basename(filepath))
# [1] "ABCD"
Oder file_path_sans_ext
wie Tyler Rinker vorgeschlagen hat:
file_path_sans_ext(basename(filepath))
# [1] "ABCD"
sub(pattern = "(.*?)\\..*$", replacement = "\\1", basename(filepath))
Sie können sub
oder verwendensubstr
sub('\\.csv$', '', str1)
#[1] "ABCD"
oder
substr(str1, 1, nchar(str1)-4)
#[1] "ABCD"
Verwenden des 'Dateipfads' aus dem Beitrag von @ JasonV
sub('\\..*$', '', basename(filepath))
#[1] "ABCD"
Oder
library(stringr)
str_extract(filepath, perl('(?<=[/])([^/]+)(?=\\.[^.]+)'))
#[1] "ABCD"
str1 <- 'ABCD.csv'
.
nach dem \\.
Könnte das auch .
buchstäblich sein dhfoo..
foo.
Nicht sicher, was mit diesen zu tun ist
.<word>
am Ende haben wird und es keine anderen Fälle gibt, würde funktionieren
Sie können dies auch versuchen:
data <- "ABCD.csv"
gsub(pattern = "\\.csv$", "", data)
#[1] "ABCD"
Dies ist beispielsweise auch bei einer Liste von Dateien hilfreich
data <- list.files(pattern="\\.csv$")
Wenn Sie den Code verwenden, wird die Erweiterung aller Dateien in der Liste entfernt.
Hier ist eine Implementierung, die für die Komprimierung und mehrere Dateien funktioniert:
remove.file_ext <- function(path, basename = FALSE) {
out <- c()
for (p in path) {
fext <- file_ext(path)
compressions <- c("gzip", "gz", "bgz", "zip")
areCompressed <- fext %in% compressions
if (areCompressed) {
ext <- file_ext(file_path_sans_ext(path, compression = FALSE))
regex <- paste0("*\\.",ext,"\\.", fext,"$")
} else {
regex <- paste0("*\\.",fext,"$")
}
new <- gsub(pattern = regex, "", path)
out <- c(out, new)
}
return(ifelse(basename, basename(out), out))
}
Laden der benötigten Bibliothek:
> library(stringr)
Extrahieren aller Übereinstimmungen aus dem regulären Ausdruck:
> str_match("ABCD.csv", "(.*)\\..*$")
[,1] [,2]
[1,] "ABCD.csv" "ABCD"
Rückgabe nur des zweiten Teils des Ergebnisses, der der Gruppe entspricht, die dem Dateinamen entspricht:
> str_match("ABCD.csv", "(.*)\\..*$")[,2]
[1] "ABCD"
BEARBEITEN für @ U-10-Forward:
Es ist im Grunde das gleiche Prinzip wie die andere Antwort. Nur dass ich diese Lösung robuster fand.
Regex weise bedeutet es:
() = Gruppe
. * = ein beliebiges einzelnes Zeichen außer dem Zeilenumbruchzeichen beliebig oft
// ist Escape-Notation, also //. bedeutet wörtlich "."
. * = beliebige Zeichen beliebig oft
$ means sollte am Ende der Eingabezeichenfolge stehen
Die Logik ist dann, dass es die Gruppe vor einem "." Zurückgibt. gefolgt von einer Gruppe von Zeichen am Ende der Zeichenfolge (die in diesem Fall der Dateierweiterung entspricht).
?tools::file_ext