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()
?
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
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()
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.
Vous pouvez faire ceci:
def deleteContent(pfile):
fn=pfile.name
pfile.close()
return open(fn,'w')