Как удалить только содержимое файла в Python
у меня есть временный файл с некоторым содержимым и скрипт python, генерирующий некоторые выходные данные в этот файл. Я хочу, чтобы это повторилось N раз, поэтому мне нужно повторно использовать этот файл (на самом деле массив файлов). Я удаляю весь контент, поэтому временный файл будет пуст в следующем цикле. Для удаления содержимого я использую этот код:
def deleteContent(pfile):
pfile.seek(0)
pfile.truncate()
pfile.seek(0) # I believe this seek is redundant
return pfile
tempFile=deleteContent(tempFile)
мой вопрос: есть ли другой (лучше, короче и безопаснее) как удалить весь контент без фактического удаления временных файлов с диск?
что-то вроде tempFile.truncateAll()
?
4 ответов
Как удалить только содержимое файла в Python
существует несколько способов установить логический размер файла в 0, в зависимости от того, как вы получаете доступ к этому файлу:
чтобы очистить открытый файл:
def deleteContent(pfile):
pfile.seek(0)
pfile.truncate()
чтобы очистить открытый файл, дескриптор которого известен:
def deleteContent(fd):
os.ftruncate(fd, 0)
os.lseek(fd, 0, os.SEEK_SET)
очистить закрытый файл (имя которого известно)
def deleteContent(fName):
with open(fName, "w"):
pass
у меня есть временный файл С некоторым содержанием [...] Мне нужно использовать этот файл
это, как говорится, в общем случае это, вероятно, не эффективно и не желательно использовать временный файл. Если у вас нет особых потребностей, вы должны подумать об использовании tempfile.TemporaryFile
и контекст менеджер для почти прозрачного создания/использования / удаления временных файлов:
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
Я думаю, что проще всего просто открыть файл в режиме записи, а затем закрыть его. Например, если ваш файл myfile.dat
содержит:
"This is the original content"
затем вы можете просто написать:
f = open('myfile.dat', 'w')
f.close()
это сотрет все содержимое. Затем вы можете записать новое содержимое в файл:
f = open('myfile.dat', 'w')
f.write('This is the new content!')
f.close()
что может быть проще, чем что-то вроде этого:
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))
это создает 400 временных файлов и записывает 1000 строк в каждый временный файл. Он выполняется менее чем за 1/2 секунды на моей непримечательной машине. Каждый временный файл всего создается и удаляется по мере открытия и закрытия контекстного менеджера в этом случае. Это быстрая, безопасная и кросс-платформа.
С помощью tempfile намного лучше, чем пытаться изобрести его.