Comment supprimer seulement le contenu du fichier en python

j'ai un fichier temporaire avec du contenu et un script python générant une sortie vers ce fichier. Je veux que cela se répète N fois, donc je dois réutiliser ce fichier (en fait tableau de fichiers). Je supprime tout le contenu, donc le fichier temp sera vide dans le prochain cycle. Pour supprimer du contenu, j'utilise ce code:

def deleteContent(pfile):

    pfile.seek(0)
    pfile.truncate()
    pfile.seek(0) # I believe this seek is redundant

    return pfile

tempFile=deleteContent(tempFile)

ma question Est: y a-t-il une autre façon (meilleure, plus courte ou plus sûre) de supprimer tout le contenu sans réellement supprimer le fichier temp à partir de disque?

quelque Chose comme tempFile.truncateAll()?

29
demandé sur bartimar 2013-06-15 21:15:33

4 réponses

comment supprimer seulement le contenu du fichier en python

Il y a plusieurs façons de définir la taille du fichier à 0, selon la façon dont vous accédez à ce fichier:

vider un fichier ouvert:

def deleteContent(pfile):
    pfile.seek(0)
    pfile.truncate()

pour vider un fichier ouvert dont le descripteur de fichier est connu:

def deleteContent(fd):
    os.ftruncate(fd, 0)
    os.lseek(fd, 0, os.SEEK_SET)

vider un fichier (dont le nom est il est connu)

def deleteContent(fName):
    with open(fName, "w"):
        pass



j'ai un fichier temporaire avec un peu de contenu [...] J'ai besoin de réutilisation ce fichier

cela étant dit, dans le cas général il n'est probablement pas efficace ni souhaitable d' réutilisation un fichier temporaire. Sauf si vous avez des besoins très spécifiques, vous devriez penser à utiliser tempfile.TemporaryFile et contexte manager pour presque transparente créer/utiliser/de supprimer des fichiers temporaires:

import tempfile

with tempfile.TemporaryFile() as temp:
     # do whatever you want with `temp`

# <- `tempfile` guarantees the file being both closed *and* deleted
#     on exit of the context manager
61
répondu Sylvain Leroux 2014-09-17 11:33:54

je pense que le plus facile est simplement d'ouvrir le fichier en mode écriture puis de le fermer. Par exemple, si votre fichier myfile.dat contient:

"This is the original content"

alors vous pouvez simplement écrire:

f = open('myfile.dat', 'w')
f.close()

cela effacerait tout le contenu. Ensuite, vous pouvez écrire le nouveau contenu dans le fichier:

f = open('myfile.dat', 'w')
f.write('This is the new content!')
f.close()
3
répondu Peaceful 2016-07-07 11:53:57

Ce qui pourrait être plus facile que quelque chose comme ceci:

import tempfile

for i in range(400):
    with tempfile.TemporaryFile() as tf:
        for j in range(1000):
            tf.write('Line {} of file {}'.format(j,i))

qui crée 400 fichiers temp et écrit 1000 lignes à chaque fichier temp. Il s'exécute en moins d'une demi-seconde sur ma machine banale. Chaque fichier temp du total est créé et supprimé pendant que le gestionnaire de contexte ouvre et ferme dans ce cas. Il est rapide, sécurisé et multi-plateforme.

en utilisant tempfile c'est beaucoup mieux que d'essayer de réinventer.

2
répondu dawg 2013-06-15 18:25:05

Vous pouvez faire ceci:

def deleteContent(pfile):
    fn=pfile.name 
    pfile.close()
    return open(fn,'w')
2
répondu the wolf 2013-06-17 22:25:30