0
votes

Obtenez une valeur maximale dans la liste des noms de fichiers

J'ai une liste de noms de fichiers avec le titre général xxx

Je souhaite renommer le fichier new_data_2018.csv de sorte que son extrémité numérique soit supérieure à celle de le plus grand fichier préexistant dans le dossier.

jusqu'à présent, j'ai xxx

ma question est de savoir comment je peux recueillir les noms de fichiers existants dans un tel manière qui retourne le plus grand suffixe. J'imagine que cela pourrait avoir quelque chose à voir avec des expressions régulières pour lesquelles la regex suivante pourrait être utile [0-9] * $ .


0 commentaires

5 Réponses :


2
votes

Vous pouvez analyser le numéro, sélectionnez le plus gros, puis ajoutez +1:

largest_value <- as.numeric(sub(".*\\_", "", files))
new_largest_value <- max(largest_value) + 1


4 commentaires

Merci pour votre réponse. Existe-t-il une modification facilement accessible au modèle si les noms de fichier incluent un numéro associé, par exemple: au lieu de "a_file_name_1" ... c'était "A_FILE_NAME_2019_1" "A_FILE_NAME_2019_31", etc.?


Cela signifie-t-il que vous souhaitez considérer que les chiffres avant . ?


les chiffres à la toute fin du titre mais après le dernier soulignement


Merci! Cela fonctionne bien. Afin de résoudre ce problème, je devais renommer le new_data_2018.csv et expirer la valeur manquante dans le plus grand_value . Appréciez la révision!



2
votes

Utilisation de titeries:

list_file_names <- list.files(directory_2018)

file_name_numbers <- extract_numeric(list_file_names)

values_no_year <- as.numeric(gsub(pattern = '2018', replacement='', x = file_name_numbers))

new_largest_value <- max(values_no_year)+1


1 commentaires

TidyR :: Extract_numérique () est obsolète selon la documentation. Readr :: Parse_Number () doit être utilisé à la place.



-1
votes

Ajoute des zéros aux numéros de votre nom de fichier, puis trier par nom de fichier dans ordre décroissant.

a_file_name_00452
a_file_name_00034
a_file_name_00001


1 commentaires

merci, je préférerais quelque chose qui n'a pas une limite supérieure sur le nombre de documents que je peux stocker



-1
votes

Un autre moyen serait de conserver un fichier texte spécial dans le dossier qui détient uniquement le dernier numéro utilisé. Ensuite, lisez et incrémentez le nombre à chaque fois qu'un nouveau fichier est ajouté au dossier. Il s'agit d'un moyen plus rapide d'obtenir la valeur maximale utilisée, en particulier si vous avez des milliers de fichiers dans le dossier. C'est aussi une solution moins compliquée.


0 commentaires

1
votes

La regex proposée par le OP [0-9] * $ code> points dans la bonne direction car il choisira zéro ou plusieurs chiffres à la fin de la chaîne. la partie cruciale em> est le $ code> qui spécifie une correspondance à la fin d'une ligne em>. (Intéressant, le $ code> a été omis de la regex de toutes les autres réponses postées jusqu'à présent).

Pour être du côté sûr, je suggère d'utiliser [0-9] + $ code> qui choisit un em> ou plusieurs chiffres à la fin de la chaîne. Il y a pas besoin em> pour renommer des fichiers comme new_data_2018.csv code> qui contient un numéro entre mais pas à la fin de la fin. p>

donc, en utilisant p> xxx pré>

Le code p> xxx pré>

calcule p> xxx pré> blockquote>

library(magrittr) # piping used to  improve readability
filenames %>% 
  stringr::str_extract("[0-9]+$") %>% # pick numbers at the very end of filenames
  as.integer() %>% 
  max(na.rm = TRUE) %>% 
  add(1) %>% 
  paste0("a_file_name_", .) %>% # create new file name
  file.rename("new_data_2018.csv", .)


0 commentaires