Как удалить содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов:
в python:
open('file.txt', 'w').close()
или альтернативно, если у вас уже есть открытый файл:
f = open('file.txt', 'r+') f.truncate(0) # need '0' when using r+
В C++ можно использовать что-то подобное.
не полный ответ больше расширения к ответу Ондры
при использовании
truncate()
( мой любимый способ ), убедитесь, что курсор находится в нужном месте. При открытии нового файла для чтения -open('FILE_NAME','r')
это курсор находится в 0 по умолчанию. Но если вы проанализировали файл в своем коде, убедитесь, что снова указали в начале файла, т. е.truncate(0)
По умолчаниюtruncate()
усекает содержимое файла, начиная с текущего cusror позиция.
открытие файла в режиме" запись " очищает его, вам не нужно специально писать в него:
open("filename", "w").close()
(вы должны закрыть его, так как время, когда файл закрывается автоматически, может быть специфичным для реализации)
вы должны перезаписать файл. В C++:
#include <fstream> std::ofstream("test.txt", std::ios::out).close();
от пользователя @jamylak альтернативная форма
open("filename","w").close()
иwith open('filename.txt','w'): pass
при использовании
with open("myfile.txt", "r+") as my_file:
, Я получаю странные нули вmyfile.txt
, тем более, что я читаю файл в первую очередь. Чтобы он работал, мне пришлось сначала изменить указательmy_file
в начале файлаmy_file.seek(0)
. Тогда я мог бы сделатьmy_file.truncate()
очистить файл.
назначение указателя файла на null внутри вашей программы просто избавится от этой ссылки на файл. Файл все еще там. Я думаю, что
remove()
функция в cstdio.h
это то, что вы ищете там. Не уверен насчет питона.
вы не можете "стереть" из файла на месте, если вам не нужно стереть конец. Либо удовлетворитесь перезаписью "пустого" значения, либо прочитайте части файла, о которых вы заботитесь, и запишите его в другой файл.
поскольку текстовые файлы являются последовательными, вы не можете сразу стереть данные на них. Ваши варианты:
- наиболее распространенным способом является создание нового файла. Прочитайте из исходного файла и запишите все в новый файл, кроме той части, которую вы хотите стереть. Когда все файлы будут записаны, удалите старый файл и переименуйте новый файл, чтобы он имел исходное имя.
- вы также можете усечь и переписать весь файл с точки, которую вы хотите изменить дальше. Стремиться укажите, что вы хотите изменить, и прочитайте остальную часть файла в память. Вернитесь к той же точке, усеките файл и запишите содержимое без части, которую вы хотите удалить.
- другой простой вариант-перезаписать данные с другими данными той же длины. Для этого ищите точное положение и записывайте новые данные. Ограничение заключается в том, что он должен иметь точно такую же длину.
посмотреть
seek
/truncate
функция / метод для реализации любой из приведенных выше идей. Как Python и C имеют эти функции.
Если безопасность важна для вас, то открытия файла для записи и закрытия его снова будет недостаточно. По крайней мере, часть информации все еще будет находиться на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
предположим, например, что файл, который вы стираете, содержит производственные пароли и должен быть удален сразу после завершения данной операции.
ноль-заполнение файла после его завершения помогает убедитесь, что конфиденциальная информация уничтожена.
в недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Он перезаписывает существующее содержимое строками нулей.
import os def destroy_password_file(password_filename): with open(password_filename) as password_file: text = password_file.read() lentext = len(text) zero_fill_line_length = 40 zero_fill = ['0' * zero_fill_line_length for _ in range(lentext // zero_fill_line_length + 1)] zero_fill = os.linesep.join(zero_fill) with open(password_filename, 'w') as password_file: password_file.write(zero_fill)
обратите внимание, что нулевое заполнение не гарантирует вашу безопасность. Если вы действительно обеспокоены, вам лучше всего заполнить ноль и используйте специальную утилиту, например Файл-Шреддер или CCleaner чтобы стереть "пустое" пространство на ваш диск.