PROJET AUTOBLOG


blog.fevrierdorian.com

source: blog.fevrierdorian.com

⇐ retour index

Déplacer récursivement un fichier vers un emplacement qui n'existe pas (encore)

vendredi 8 février 2013 à 10:37

Python_logo_150.pngC'est rien du tout mais à chaque fois que je dois déplacer un fichier vers un dossier qui n'existe pas je me retape cette fonction à la mano avec les désagrément que peut engendrer l'utilisation des os.mkdir et os.rename. :casseTeteMur:

Comme ce genre de fonction peut intéresser des gens je la met ici pour en faire profiter tout le monde (afin de participer activement et agrandir cette intelligence collective qu'est l'internet... Pourquoi je dis ça? Euh... Et bien en fait j'essais de grapiller quelques lignes sinon le bloc du code se place mal... :seSentCon: )

Vous allez voir que c'est assez simple et facilement modifiable.

def recursivelyMoveFile(srcFile, dstFile) :
 
	curFolderPath = os.path.sep	# get the os separator. "/" on linux.
 
	# we regenerate the folder path we want to create the file in and check, at every step the folder exists
	for folder in os.path.dirname(dstFile).split(os.path.sep) :
 
		curFolderPath = os.path.join(curFolderPath, folder)
 
		if not os.path.isdir(curFolderPath) :
 
			os.mkdir(curFolderPath)
 
	os.rename(srcFile, dstFile)

Vous voyez? Rien de bien sorcier. :sourit:

Notez que la fonction ne vérifie rien du tout. Soyez donc vigilant avec le os.rename.

Bon... Comme je suis gentil je vous propose une fonction blindé anti-pythonic pour le coup (pour les copieurs/colleurs foux qui ne prennent pas le temps de lire :aupoil: )

def recursivelyMoveFile(srcFile, dstFile) :
 
	if not os.path.isfile(srcFile) :
		raise Exception("srcFile is not a file -> %s", srcFile)
 
	if os.path.isfile(dstFile) :
		raise Exception("dstFile already exist -> %s", dstFile)
 
 
	curFolderPath = os.path.sep	# get the os separator. "/" on linux.
 
	# we regenerate the folder path we want to create the file in and check, at every step the folder exists
	for folder in os.path.dirname(dstFile).split(os.path.sep) :
 
		curFolderPath = os.path.join(curFolderPath, folder)
 
		if not os.path.isdir(curFolderPath) :
 
			os.mkdir(curFolderPath)
 
	os.rename(srcFile, dstFile)

Codez bien! (Et vite surtout! :gniarkgniark: )