Je voudrais créer un fichier avec le chemin x
en utilisant python. J'utilise os.system(y)
où y = 'touch %s' % (x)
. J'ai cherché une version non-répertoire de os.mkdir
, mais je n'ai rien trouvé. Y a-t-il un outil comme celui-ci pour créer un fichier sans l'ouvrir, ou sans utiliser system ou popen/subprocess?
Réponses
Trop de publicités?Il n'y a aucun moyen de créer un fichier sans l'ouvrir Il y a os.mknod("newfile.txt")
(mais cela nécessite des privilèges root sous OSX). L'appel système pour créer un fichier est en fait open()
avec le drapeau O_CREAT
. Donc, de toute façon, vous ouvrirez toujours le fichier.
Donc, la manière la plus simple de simplement créer un fichier sans le tronquer s'il existe est la suivante :
open(x, 'a').close()
En fait, vous pourriez omettre le .close()
car le GC de référencement de CPython le fermera immédiatement après que l'instruction open()
ait terminé - mais il est plus propre de le faire explicitement et de compter sur le comportement spécifique de CPython n'est pas non plus une bonne chose.
Si vous souhaitez le comportement de touch
(c'est-à-dire mettre à jour la mtime si le fichier existe) :
import os
def touch(chemin):
with open(chemin, 'a'):
os.utime(chemin, None)
Vous pourriez étendre ceci pour également créer tous les répertoires dans le chemin qui n'existent pas :
basedir = os.path.dirname(chemin)
if not os.path.exists(basedir):
os.makedirs(basedir)