Comme il est difficile de vérifier à chaque fois, je vais résumer comment faire fonctionner les fichiers / répertoires avec Python.
In [1]: import os
Fichier existant
In [2]: os.path.exists("./test1/test1.txt")
Out[2]: True
Fichier inexistant
In [3]: os.path.exists("./test1/test1.doc")
Out[3]: False
Annuaire existant
In [4]: os.path.exists("./test1")
Out[4]: True
Annuaire inexistant
In [5]: os.path.exists("./test2")
Out[5]: False
Fichier
In [6]: os.path.isfile("./test1/test1.txt")
Out[6]: True
annuaire
In [7]: os.path.isfile("./test1")
Out[7]: False
Fichier inexistant
In [8]: os.path.isfile("./test1/test1.doc")
Out[8]: False
annuaire
In [9]: os.path.isdir("./test1")
Out[9]: True
Fichier
In [10]: os.path.isdir("./test1/test1.txt")
Out[10]: False
Annuaire inexistant
In [11]: os.path.isdir("./test2")
Out[11]: False
In [12]: os.mkdir("./test2")
In [13]: ls
test1/ test2/
Les métadonnées ne sont pas copiées pour copyfile et copy, mais les métadonnées sont copiées pour copy2. Si vous utilisez copy2, la date de création du fichier sera également copiée, mais le fichier et la copie auront une nouvelle date de création de fichier.
In [16]: import shutil
In [17]: shutil.copyfile("./test1/test1.txt", "./test2.txt")
In [18]: ls
test1/ test2.txt
In [19]: shutil.copy("./test1/test1.txt", "./test3.txt")
In [20]: shutil.copy2("./test1/test1.txt", "./test4.txt")
In [21]: ls
test1/ test1.txt test2.txt test3.txt test4.txt
Lors de la création d'un nouveau dossier et de la copie
In [22]: shutil.copytree("./test1", "./test2")
In [23]: ls
test1/ test1.txt test2/ test2.txt test3.txt test4.txt
In [24]: ls test1
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [25]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
J'obtiens une erreur en essayant de copier dans un dossier existant
In [27]: os.mkdir("./test2")
In [28]: shutil.copytree("./test1", "./test2")
OSError: [Errno 17] File exists: './test2'
Si vous souhaitez copier dans un répertoire existant
In [29]: from distutils.dir_util import copy_tree
In [30]: copy_tree("./test1", "./test2")
In [31]: ls test1
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [32]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [33]: os.remove("./test1.txt")
In [34]: ls
test1/ test2/ test2.txt test3.txt test4.txt
Pour supprimer un répertoire vide J'obtiens une erreur s'il y a des fichiers dans le répertoire
In [14]: os.rmdir("./test2")
In [15]: ls
test1/
Lors de la suppression du contenu de tout le dossier Le contenu du dossier est peut-être vide.
In [35]: shutil.rmtree("./test2")
In [36]: ls
test1/ test2.txt test3.txt test4.txt
Une combinaison de glob et remove
In [43]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [44]: [os.remove(f) for f in glob.glob("./test2/*.log")]
Out[44]: [None, None, None]
In [45]: ls test2
test1.txt test2.txt test3.txt test4.txt
test10.txt test20.txt test30.txt
In [52]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [53]: shutil.move("./test2/test1.txt", ".")
In [54]: ls
test1/ test1.txt test2/
In [55]: ls test2
test1.log test2.log test20.txt test3.txt test4.txt
test10.txt test2.txt test3.log test30.txt
Renommer le fichier
In [56]: os.rename("./test1.txt", "./test2.txt")
In [57]: ls
test1/ test2/ test2.txt
Renommer le répertoire
In [58]: os.rename("./test2", "./test3")
In [59]: ls
test1/ test2.txt test3/
In [60]: ftitle, fext = os.path.splitext('/path/to/test1.txt')
In [62]: fext
Out[62]: '.txt'
In [60]: ftitle, fext = os.path.splitext('/path/to/test1.txt')
In [61]: ftitle
Out[61]: '/path/to/test1'
In [65]: os.path.basename('/path/to/test1.txt')
Out[65]: 'test1.txt'
Travailler avec le chemin Windows sous Linux ne fonctionne pas. Bien sûr, ça va sur Windows
In [66]: os.path.basename('\\path\\to\\test1.txt')
Out[66]: '\\path\\to\\test1.txt'
Si vous souhaitez le traiter comme un chemin Windows sous Linux
In [67]: import ntpath
In [68]: ntpath.basename('/path/to/test1.txt')
Out[68]: 'test1.txt'
Ce n'est pas grave si le chemin Windows vient
In [69]: ntpath.basename('\\path\\to\\test1.txt')
Out[69]: 'test1.txt'
In [70]: os.path.split('/path/to/test1.txt')
Out[70]: ('/path/to', 'test1.txt')
Si vous souhaitez le traiter comme un chemin Windows sous Linux
In [71]: import ntpath
In [72]: ntpath.split('\\path\\to\\test1.txt')
Out[72]: ('\\path\\to', 'test1.txt')
In [73]: ntpath.split('/path/to/test1.txt')
Out[73]: ('/path/to', 'test1.txt')
In [74]: os.path.join('/path/to','test1.txt')
Out[74]: '/path/to/test1.txt'