J'ai trouvé quelques articles connexes, mais rien ne résout vraiment mon problème :

Je souhaite copier des fichiers selon qu'une partie du nom du fichier correspond à un vecteur. Ce qui suit ne renvoie que la première correspondance du vecteur, pas chaque correspondance

vector_key<- c(12345, 54321)

list.files("C:/Userfiles")

Où les fichiers utilisateur incluent "12345.pdf", "54321.pdf" "32.pdf" et "23.pdf", parmi environ 200 autres fichiers.

files<- list.files("C:/Userfiles",  full.names= TRUE, pattern = vector_key)
print files

Cela imprime le premier match mais pas le second

"C:/Userfiles/12345.pdf" mais pas "C:/Userfiles/54321/pdf"

J'apprécierais toute aide sur la façon de lister.files et de faire correspondre TOUS les modèles dans le vector_key, pas seulement le premier match.

1
Eric Schroer 4 févr. 2020 à 21:27

1 réponse

Meilleure réponse

Nous avons besoin de pattern comme chaîne unique. Selon ?list.files

pattern - une expression régulière facultative. Seuls les noms de fichiers qui correspondent à l'expression régulière seront renvoyés.

Ici, le | est un métacaractère signifiant OR dans regex

pat <- paste(vector_key, collapse = "|")
list.files("C:/Userfiles",  full.names= TRUE, pattern = pat)

De plus, s'il s'agit d'obtenir tous les fichiers avec le .pdf, utilisez simplement

list.files("C:/Userfiles", full.names = TRUE, pattern = "^\\d+\\.pdf")

\\d+ - un ou plusieurs chiffres suivis d'un . (. - est un métacaractère qui correspond à n'importe quel caractère, il doit donc être soit échappé (\\) soit placé dans crochets ([.] pour évaluer littéralement)

0
akrun 4 févr. 2020 à 18:40