Как стереть содержимое файла текстового файла в Python? - PullRequest
86 голосов
/ 05 мая 2010

У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?

Ответы [ 10 ]

196 голосов
/ 05 мая 2010

В питоне:

open('file.txt', 'w').close()

Или, если у вас уже есть открытый файл:

f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+

В C ++ вы можете использовать нечто подобное.

22 голосов
/ 02 января 2014

Не полный ответ, а расширение дополнения к ответу Ондры

При использовании truncate() (мой предпочтительный метод) убедитесь, что курсор находится в нужной позиции. Когда новый файл открыт для чтения - open('FILE_NAME','r'), его курсор по умолчанию равен 0. Но если вы проанализировали файл в своем коде, убедитесь, что снова указали на начало файла, т.е. truncate(0) По умолчанию truncate() усекает содержимое файла, начиная с текущей позиции ошибки.

Простой пример

10 голосов
/ 05 мая 2010

Открытие файла в режиме «запись» очищает его, вам не нужно специально писать в него:

open("filename", "w").close()

(вы должны закрыть его, поскольку время, когда файл автоматически закрывается, может зависеть от реализации)

6 голосов
/ 12 апреля 2017

От пользователя @jamylak альтернативная форма open("filename","w").close() -

with open('filename.txt','w'): pass
6 голосов
/ 05 мая 2010

Вы должны перезаписать файл. В C ++:

#include <fstream>

std::ofstream("test.txt", std::ios::out).close();
3 голосов
/ 24 июля 2017

При использовании with open("myfile.txt", "r+") as my_file: я получаю странные нули в myfile.txt, тем более что я сначала читаю файл. Чтобы это работало, я должен был сначала изменить указатель my_file на начало файла с my_file.seek(0). Тогда я мог бы сделать my_file.truncate(), чтобы очистить файл.

1 голос
/ 05 мая 2010

Назначение указателя файла на нуль внутри вашей программы просто избавит от этой ссылки на файл. Файл все еще там. Я думаю, что функция remove() в c stdio.h - это то, что вы ищете там. Не уверен насчет Python.

0 голосов
/ 18 апреля 2018

Если безопасность важна для вас, то открытия файла для записи и повторного закрытия будет недостаточно. По крайней мере, часть информации все еще будет храниться на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.

Предположим, например, что файл, который вы стираете, содержит рабочие пароли и должен быть удален сразу после завершения текущей операции.

Нулевое заполнение файла после его использования помогает обеспечить уничтожение конфиденциальной информации.

В недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Перезаписывает существующее содержимое строками из нулей.

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)

Обратите внимание, что нулевое заполнение не гарантирует вашей безопасности. Если вы действительно обеспокоены, лучше всего заполнить нулями и , воспользовавшись специализированной утилитой, такой как File Shredder или CCleaner , чтобы очистить 'пустой 'место на вашем диске.

0 голосов
/ 05 мая 2010

Вы не можете "стереть" файл на месте, если вам не нужно стереть конец. Либо довольствуйтесь перезаписью «пустого» значения, либо прочитайте интересующие вас части файла и запишите его в другой файл.

0 голосов
/ 05 мая 2010

Поскольку текстовые файлы являются последовательными, вы не можете напрямую удалять данные на них. Ваши варианты:

  • Самый распространенный способ - создать новый файл. Прочитайте из исходного файла и запишите все в новый файл, кроме той части, которую вы хотите стереть. Когда весь файл будет записан, удалите старый файл и переименуйте новый файл, чтобы он имел оригинальное имя.
  • Вы также можете обрезать и перезаписать весь файл, начиная с той точки, которую хотите изменить. Найдите точку, которую вы хотите изменить, и прочитайте оставшуюся часть файла в память. Вернитесь к той же точке, обрежьте файл и запишите содержимое без части, которую вы хотите стереть.
  • Другим простым вариантом является перезапись данных другими данными такой же длины. Для этого ищите точную позицию и запишите новые данные. Ограничение состоит в том, что он должен иметь одинаковую длину.

Посмотрите на функцию / метод seek / truncate, чтобы реализовать любую из представленных выше идей. И Python, и C имеют эти функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...