Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comment créer un fichier vide en Python ?

+3 votes

Comment puis-je créer un fichier vide avec Python comme peut le faire la commande touch sous Linux ?

demandé 17-Jun-2015 par DoubleNain (1,678 points)

3 Réponses

+5 votes
 
Meilleure réponse

Sinon, via le module path.py:
Si ce n'est pas fait, un coup de

sudo pip install path.py

Puis ensuite :

from path import path

path('file.txt').touch()

Ça nécessite l'installation d'une lib externe (qui se résume à un unique fichier, Sam en avait parlé dans un de ses posts), mais pour le coup on est proche de la commande Unix. Et c'est utilisable en dehors d'un environnement unix, contrairement à un appel système.

répondu 17-Jun-2015 par Poisson
sélectionné 17-Jun-2015 par DoubleNain

J'aime bien cette solution élégante et portable sans un impact lourd en terme de dépendance. Merci à vous pour vos réponses pertinentes !

Si tu utilises path.py pour ne faire qu'un touch, je trouve ça dommage et overkill.
mais si tu en profite pour exploiter la lib ça a l'air de vraiment valoir le coup :)

Bien entendu, avec path.py vient pleins de trucs très fun, ça permet d'intégrer une gestion cohérente des chemins de dossier... mais même juste pour une opération unique comme un touch, la solution est élégante et portable. C'est pas un lance roquette, c'est le cricket de MIB : compact et puissant ;)

+4 votes

OPTION 1 : utilisation d'open

Pour créer un fichier vide en python, il suffit d'ouvrir un fichier qui n'existe pas en mode écriture(w) :

[boblinux@bobz IE]$ ls 
[boblinux@bobz IE]$ # ls n'affiche rien car mon repertoire est vide pour l'instant !

[boblinux@bobz IE]$ python3 # je lance le "shell" python3

Python 3.4.3 
>>> fichier= open("fic.txt","w") # J'ouvre le fichier en mode écriture 
>>> fichier.close()
>>> exit() # j'me barre du shell python3

[boblinux@bobz IE]$ ls # Maintenant le fichier "fic.txt" a bien été crée ! 
fic.txt

[boblinux@bobz IE]$ cat fic.txt 
[boblinux@bobz IE]$ # en utilisant cat pour l'afficher..bah rien ne s'affiche, normal il est vide !

OPTION 2 : module os pour exécuter des commandes unix

Utiliser directement la commande touch dans un programme python grâce au module os :

[boblinux@bobz IE]$ ls # Seul fic.txt est crée pour l'instant
    fic.txt  

>>> import os
>>> os.system("touch fic_vide.txt")

[boblinux@bobz IE]$ ls # Maintenant le fichier fic_vide.txt est apparu !
fic.txt  fic_vide.txt

[boblinux@bobz IE]$ cat fic_vide.txt 
[boblinux@bobz IE]$ # en utilisant cat pour l'afficher..bah rien ne s'affiche, normal il est vide !

Pour en savoir plus sur les commandes Unix avec python, c'est par

répondu 17-Jun-2015 par boblinux (3,092 points)
edité 17-Jun-2015 par boblinux
+6 votes

Si tu veux uniquement créer un fichier vide, un simple

open(fname, 'a').close() 
# mode append, ne fera pas de truncate 
# sur le contenu du fichier si il existe deja

fait l'affaire.

Si tu veux te rapprocher au plus prés du comportement de touch, qui change les access time et modification time et crée le fichier si il n'existe pas, il y a un bel exemple sur SO qui fait appel a os.utime.

import os
def touch(fname, times=None):
    with open(fname, 'a'):
        os.utime(fname, times) # modification du atime et mtime
répondu 17-Jun-2015 par jc (2,674 points)
...