J'ai un fichier temporaire avec du contenu et un script python) qui génère une sortie vers ce fichier. Je veux que cela se répète N fois. Je dois donc réutiliser ce fichier (en réalité un tableau de fichiers). Je supprime tout le contenu, donc le fichier temporaire sera vide lors du prochain cycle. Pour supprimer le 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 la suivante: existe-t-il un autre moyen (meilleur, plus court ou plus sûr) de supprimer tout le contenu sans supprimer réellement le fichier temporaire du disque?
Quelque chose comme tempFile.truncateAll()
?
Comment supprimer uniquement le contenu du fichier en python
Il existe plusieurs façons de définir la taille logique d'un fichier sur 0, en fonction de la méthode utilisée pour accéder à ce fichier:
Pour 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)
Pour vider un fichier fermé (dont le nom est connu)
def deleteContent(fName):
with open(fName, "w"):
pass
J'ai un fichier temporaire avec du contenu [...] il me faut réutiliser ce fichier
Cela étant dit, dans le cas général ce n'est probablement ni efficace ni souhaitable de réutiliser un fichier temporaire. Sauf si vous avez des besoins très spécifiques, vous devriez penser à utiliser tempfile.TemporaryFile
et a gestionnaire de contexte pour créer/utiliser/supprimer de manière presque transparente vos 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 simple est d'ouvrir simplement le fichier en mode écriture puis de le fermer. Par exemple, si votre fichier myfile.dat
contient:
"This is the original content"
Ensuite, 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()
Tu peux le faire:
def deleteContent(pfile):
fn=pfile.name
pfile.close()
return open(fn,'w')
Quoi de plus facile que quelque chose comme ça:
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))
Cela crée 400 fichiers temporaires et écrit 1 000 lignes dans chaque fichier temporaire. Il s'exécute en moins de 1/2 seconde sur ma machine banale. Chaque fichier temporaire du total est créé et supprimé lorsque le gestionnaire de contexte s'ouvre et se ferme dans ce cas. C'est rapide, sécurisé et multi-plateforme.
Utiliser tempfile est beaucoup mieux que d’essayer de le réinventer.