FAQ Python
FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
- Comment lister les fichiers/répertoires d'un répertoire ?
- Comment lister l'arborescence d'un répertoire ?
- Comment savoir si un chemin représente un fichier ?
- Comment connaître la taille d'un fichier ?
- Comment supprimer un fichier ?
- Comment renommer/déplacer un fichier ?
- Comment manipuler les différentes parties d'un nom de fichier ?
os.listdir(path) renvoie une liste contenant les noms de tous les fichiers et répertoires de path
>>>
import
os
>>>
os.listdir
(
'c:/python24'
)
['DLLs'
, 'Doc'
, 'include'
, 'kinterbasdb-wininst.log'
, 'Lib'
, 'libs'
, 'LICENSE.txt'
, 'matplotlib-wininst.log'
,
'msvcp71.dll'
, 'msvcr71.dll'
, 'MySQL-python.exe-wininst.log'
, 'NEWS.txt'
, 'numarray-wininst.log'
,
'Numeric-wininst.log'
, 'PIL-wininst.log'
, 'psycopg-wininst.log'
, 'py.ico'
, 'pyc.ico'
, 'python.exe'
,
'python.exe.manifest'
, 'pythonw.exe'
, 'pythonw.exe.manifest'
, 'pywin32-wininst.log'
, 'README.txt'
,
'Removekinterbasdb.exe'
, 'Removematplotlib.exe'
, 'RemoveMySQL-python.exe.exe'
, 'Removenumarray.exe'
,
'RemoveNumeric.exe'
, 'RemovePIL.exe'
, 'Removepsycopg.exe'
, 'Removepywin32.exe'
, 'Scripts'
, 'share'
, 'tcl'
,
'Tools'
, 'w9xpopen.exe'
]
On peut également utiliser la fonction glob.glob(path) qui renvoie une liste contenant le chemin complet des fichiers ou répertoire contenu dans path
>>>
import
glob
>>>
glob.glob
(
'c:/python24/*'
)
['c:
\\
python24
\\
boa-constructor-wininst.log'
, 'c:
\\
python24
\\
DLLs'
, 'c:
\\
python24
\\
Doc'
,
'c:
\\
python24
\\
egenix-mx-base-wininst.log'
, 'c:
\\
python24
\\
include'
, 'c:
\\
python24
\\
kinterbasdb-wininst.log'
,
'c:
\\
python24
\\
Lib'
, 'c:
\\
python24
\\
libs'
, 'c:
\\
python24
\\
LICENSE.txt'
, 'c:
\\
python24
\\
matplotlib-wininst.log'
,
'c:
\\
python24
\\
msvcp71.dll'
, 'c:
\\
python24
\\
msvcr71.dll'
, 'c:
\\
python24
\\
MySQL-python.exe-wininst.log'
,
'c:
\\
python24
\\
NEWS.txt'
, 'c:
\\
python24
\\
numarray-wininst.log'
, 'c:
\\
python24
\\
PIL-wininst.log'
,
'c:
\\
python24
\\
psycopg2-wininst.log'
, 'c:
\\
python24
\\
py.ico'
, 'c:
\\
python24
\\
py2exe-wininst.log'
,
'c:
\\
python24
\\
pyc.ico'
, 'c:
\\
python24
\\
python.exe'
, 'c:
\\
python24
\\
python.exe.manifest'
, 'c:
\\
python24
\\
pythonw.exe'
,
'c:
\\
python24
\\
pythonw.exe.manifest'
, 'c:
\\
python24
\\
README.txt'
, 'c:
\\
python24
\\
Removeboa-constructor.exe'
,
'c:
\\
python24
\\
Removeegenix-mx-base.exe'
, 'c:
\\
python24
\\
Removekinterbasdb.exe'
, 'c:
\\
python24
\\
Removematplotlib.exe'
,
'c:
\\
python24
\\
RemoveMySQL-python.exe.exe'
, 'c:
\\
python24
\\
Removenumarray.exe'
, 'c:
\\
python24
\\
RemovePIL.exe'
,
'c:
\\
python24
\\
Removepsycopg2.exe'
, 'c:
\\
python24
\\
Removepy2exe.exe'
, 'c:
\\
python24
\\
Scripts'
, 'c:
\\
python24
\\
share'
,
'c:
\\
python24
\\
tcl'
, 'c:
\\
python24
\\
Tools'
, 'c:
\\
python24
\\
unins000.dat'
, 'c:
\\
python24
\\
unins000.exe'
,
'c:
\\
python24
\\
w9xpopen.exe'
]
Voici 2 façons de faire. Chacune des fonctions retournera la liste des fichiers (avec chemin complet)
contenus dans un répertoire ou dans un de ses sous-répertoires.
La première méthode utilise la fonction glob.glob(path) qui va lister le contenu d'un répertoire avec appel récursif aux
sous-répertoires
import
glob
import
os.path
def
listdirectory
(
path):
fichier=
[]
l =
glob.glob
(
path+
'
\\
*'
)
for
i in
l:
if
os.path.isdir
(
i): fichier.extend
(
listdirectory
(
i))
else
: fichier.append
(
i)
return
fichier
La fonction os.walk(path) crée un générateur de triplets (root, dirs, files) dans l'arborescence de path.
Un triplet est généré par répertoire visité. root représente le chemin d'accès du répertoire visité. dirs est la liste
des sous-répertoires du répertoire root et files est la liste des fichiers du répertoire root.
import
os.path
def
listdirectory2
(
path):
fichier=
[]
for
root, dirs, files in
os.walk
(
path):
for
i in
files:
fichier.append
(
os.path.join
(
root, i))
return
fichier
On peut en profiter pour tester la rapidité des 2 fonctions.
import
time
def
compare
(
path):
a =
time.clock
(
)
listdirectory
(
path)
b =
time.clock
(
)
listdirectory2
(
path)
c =
time.clock
(
)
return
b-
a, c-
b
>>>
print
compare
(
'c:/python24'
)
(
1.0782314512039937
, 1.0392410208560028
) ## les 2 fonctions se valent...
os.path.isfile(path) renvoie True si path désigne un fichier existant
os.path.getsize(path) renvoie la taille du fichier path
Pour supprimer un fichier, il suffit d'utiliser la fonction os.remove(path) où path réprésente le chemin d'accès au fichier.
os.rename(src, dst) permet de renommer le fichier de chemin src en le fichier de chemin dst, le répertoire contenant
le fichier de destination doit cependant déjà exister, une erreur étant sinon retournée.
os.renames(src, dst) permet de renommer le fichier src en dst tout en créant si nécessaire les répertoires contenant
le fichier de destination.
Enfin shutil.move(src, dst) renomme exactement comme os.renames le fichier src en dst si le fichier de
destination est sur le même système de fichiers. Autrement elle copie simplement src sur dst puis efface src
Si le fichier de destination se trouve sur le même système de fichiers, vous pouvez utiliser aussi bien les fonctions os.rename,
os.renames que shutil.move sinon préférez shutil.move, les 2 autres fonctions pouvant échouer à leur tâche.
Lien : Comment renommer/déplacer un répertoire ?
Lien : Python Library Reference: Files and Directories
Lien : Python Library Reference: shutil -- High-level file operations
Le module os.path propose plusieurs fonctions simples d'utilisation pour récupérer les parties d'un nom de fichier:
- dirname(path): retourne le répertoire associé au path
- basename(path): retourne le nom simple du fichier (extension comprise)
- split(path): retourne le couple (répertoire, nom du fichier)
- splitdrive(path): retourne le couple (lecteur, chemin du fichier sans le lecteur)
- splitext(path): retourne le couple (chemin du fichier sans l'extension, extension)
- splitunc(path): retourne le couple (unc, rest) où unc est du type \\host\répertoire partagé et rest le reste du path (cette fonction n'est valable que sous Windows)
>>>
import
os.path
>>>
os.path.dirname
(
'c:
\\
python24
\\
python.exe'
)
'c:
\\
python24'
>>>
os.path.basename
(
'c:
\\
python24
\\
python.exe'
)
'python.exe'
>>>
os.path.split
(
'c:
\\
python24
\\
python.exe'
)
(
'c:
\\
python24'
, 'python.exe'
)
>>>
os.path.splitdrive
(
'c:
\\
python24
\\
python.exe'
)
(
'c:'
, '
\\
python24
\\
python.exe'
)
>>>
os.path.splitext
(
'c:
\\
python24
\\
python.exe'
)
(
'c:
\\
python24
\\
python'
, '.exe'
)
>>>
os.path.splitunc
(
r'\\host\python24\lib\ftplib.py'
)
(
'
\\\\
host
\\
python24'
, '
\\
lib
\\
ftplib.py'
)