Je suis assez nouveau pour Python . J'ai exploré le module shutil
et je peux faire bouger les choses en général. Ma question tourne autour de:
Imaginez un scénario dans lequel vous avez des centaines de fichiers dans un dossier d'exportation. Bien que tous les fichiers soient distincts, 13 d'entre eux sont destinés à un fournisseur spécifique. J'aimerais créer un script qui parcourt le dossier d'exportation, évalue chaque nom de fichier, saisit tous les fichiers Apple et les place dans le dossier Apple, les fichiers Intel et les met dans le dossier Intel, etc. .
J'essayais d'avoir des caractères génériques dans la copie shutil
, mais je n'ai pas eu de chance.
Merci,
JT
La solution la plus simple à laquelle je pouvais penser:
import shutil
import os
source = '/path/to/source_folder'
dest1 = '/path/to/Apple_folder'
dest2 = '/path/to/intel_folder'
files = os.listdir(source)
for f in files:
if (f.startswith("Apple") or f.startswith("Apple")):
shutil.move(f, dest1)
Elif (f.startswith("Intel") or f.startswith("intel")):
shutil.move(f, dest2)
Les dossiers de destination do doivent exister.
import glob, shutil
for file in glob.glob('path_to_dir/Apple*'):
shutil.move(file, new_dst)
# a list of file types
vendors =['path_to_dir/Apple*', 'path_to_dir/intel*']
for file in vendors:
for f in (glob.glob(file)):
if "Apple" in f: # if Apple in name, move to new Apple dir
shutil.move(f, new_Apple_dir)
else:
shutil.move(f, new_intel_dir) # else move to intel dir
Modification mineure de la réponse de Padaic:
import glob
import shutil
vendors = ("*Apple*.*", "*Intel*.*")
paths = (".\\Apple\\", ".\\Intel\\")
for idx in range(len(vendors)):
for matches in glob.glob(vendors[idx]):
shutil.move(matches, paths[idx])
En supposant que les noms de fichiers contiennent des chaînes spécifiques identifiant le fournisseur auquel le rapport se rapporte, vous pouvez créer un dictionnaire qui mappe ces chaînes d'identification au fournisseur approprié. Par exemple:
import shutil
import os
path = '/path/to/location'
vendorMap = {'Apple': 'Apple',
'intel': 'Intel',
'stringID3': 'vendor3'}
files = os.listdir(path)
for f in files:
for key, value in vendorMap.iteritems():
if key in f.lower():
shutil.copy(f, path + '/' + value)
else:
print 'Error identifying vendor for', f
Cela créera un dossier dans le répertoire en cours, nommé pour le fournisseur approprié, et y copiera les rapports. Notez que cet exemple utilise la méthode s.lower () afin que le nom du fournisseur ne soit pas modifié, quelle que soit son importance.
La réponse d'Andreas convient parfaitement pour l'exemple de Apple que vous avez donné. Si vous cherchez quelque chose de plus charnu, consultez les regex. Ils vous permettent de rechercher des motifs de texte répétés.
Là où je travaille, par exemple, nous avons différents formats de texte selon que le fichier est un rapport, un dessin technique, etc. Ils suivent tous un format similaire à "initiales de la société/numéro de projet/département."
En regex, vous pouvez chercher quelque chose comme:
import re
fileregex = re.compile(r'(\w\w)/(\d{4})/(\w\w))
for file in os.listdir(*path*):
filename = fileregex.search(file)
C'est un outil pratique à connaître.