246 votes

Créer un fichier vide en utilisant Python

Je voudrais créer un fichier avec le chemin x en utilisant python. J'utilise os.system(y)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?

435voto

ThiefMaster Points 135805

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)

61voto

Bachsau Points 612

Bien sûr, IL existe un moyen de créer des fichiers sans les ouvrir. C'est aussi simple que d'appeler os.mknod("newfile.txt"). Le seul inconvénient est que cet appel nécessite des privilèges root sur OSX.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X