Je le code suivant pour trier les fichiers CSV dans une structure de répertoire similaire aux fichiers WAV les fichiers CSV ont été créés à partir de:shutil.move() - message d'erreur que le fichier de destination n'existe pas
from __future__ import print_function
import os
import shutil
WAV_FILES_PATH = 'g:\\wav_files\\test007\\'
CSV_FILES_PATH = 'g:\\csv_files\\test007\\'
wav_files_path = os.walk(WAV_FILES_PATH)
csv_files_path = os.walk(CSV_FILES_PATH)
# I'm only interested in CSV files in the root for CSV_FILES_PATH
(csv_root, _, csv_files) = csv_files_path.next()
print('Running ...')
for root, subs, files in wav_files_path:
for file_ in files:
if file_.endswith('wav'):
for csv_file in csv_files:
if(file_.split('.')[0] in csv_file):
src = os.path.join(csv_root, csv_file)
dst = os.path.join(csv_root, root.replace(WAV_FILES_PATH, ''), csv_file)
print('Moving "%s" to "%s" ...' % (src, dst))
shutil.move(src, dst)
Il y a des sous-dossiers dans WAV_FILES_PATH qui contiennent les fichiers WAV, par exemple
g:\wav_files\test007\run001\
g:\wav_files\test007\run002\
Les fichiers CSV sont situés dans g:\csv_files\test007
non ordonnée, je veux cloner la structure des répertoires et déplacer les fichiers CSV à leur dossier correct. En fin de compte, je veux avoir par exemple g:\csv_files\test007\run001\
pour contenir le fichier CSV correspondant aux fichiers WAV dans g:\wav_files\test007\run001\
.
Le problème est que la commande shutil.move()
me donne un IOError [Errnor 2]
complétant que la DESTINATION n'existe pas. Cela me rend confus, car j'ai un accès en écriture à la destination et shutil.move() prétend que les répertoires cibles n'ont pas besoin d'exister.
Ai-je raté quelque chose ici?
Les fonctions d'impression() imprime correctement src et dst.
C'est la sortie d'erreur:
[...]
C:\Python27\lib\shutil.pyc in copyfile(src, dst)
80 raise SpecialFileError("`%s` is a named pipe" % fn)
81
82 with open(src, 'rb') as fsrc:
---> 83 with open(dst, 'wb') as fdst:
84 copyfileobj(fsrc, fdst)
IOError: [Errno 2] No such file or directory: 'g:\\csv_files\\test007\\run001\\recording_at_20140920_083721.csv'
INFO: j'ai ajouté l'erreur partie jetant (les with
blocs) directement à mon code et il est pas jeter une erreur. Maintenant, je copie moi-même les fichiers et je les supprime par la suite.
Il semble y avoir un bug dans la façon dont shutil.move() fonctionne.
« shutil.move() prétend que les répertoires cibles ne doivent pas exister. ». Ce n'est pas comme ça que j'ai lu la [documentation] (https://docs.python.org/2/library/shutil.html#shutil.move). Il dit "Le répertoire de destination ne doit pas déjà exister.", Mais je prends ça pour le cas où 'src' est un répertoire, pas quand c'est un fichier. Je – Evert
ajouté 'sinon os.path.exists (os.path.dirname (dst)): os.makedirs (os.path.dirname (dst))' avant la commande 'shutil.move()', ce qui crée la répertoire à l'emplacement correct, mais 'shutil.move()' échoue toujours en affirmant que la destination n'existe pas. – Blutkoete