Как очистить файл python

Обновлено: 02.07.2024

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

люди, которые дали ответы, сказали, что это невозможно . так что вы хотите сказать мне, как легко это сделать в python?

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

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

причина, по которой это работает (как в C ++, так и в python), заключается в том, что по умолчанию при открытии файла для записи он усекает существующее содержимое. Так что на самом деле это своего рода побочный эффект, и поэтому я бы предпочел явный вызов truncate () для ясности, хотя это и не нужно. если вы открыли файл с помощью «r +», используйте truncate (0), если вы проанализировали файл, который у вас, вероятно, есть. Добавьте это к ответу выше, чтобы закончить! используйте f.seek (0), чтобы переместить указатель на начало файла

Не полный ответ на расширение ответа ondra

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

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

Нет необходимости в вызове close() . Деструктор закроет файл. Так что вам просто нужно создать временный: ofstream("test.txt"); Этот вопрос изменился с момента ответа. Может быть, удалить вопрос, учитывая новое направление вопроса?

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

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

В качестве альтернативы используйте unlink () в unistd.h. Кстати, как remove (), так и unlink () уменьшат счетчик ссылок в обычном файле, а не удалят его. Файл будет удален, как только счетчик ссылок упадет до нуля. Например, если у вашего процесса есть открытый файл, и вы вызываете unlink () или remove () для него, он не будет удален, пока файл не будет закрыт () d (т. Е. Ref ref падает до нуля - также не предполагает никаких других процессов). откройте файл). Это поведение полезно, например, чтобы гарантировать, что временные файлы не останутся после ненормального завершения процесса (например, open (), unlink (), выполнить файл IO, CRASH , close () НЕ вызывается).

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

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

хорошо, как перезаписать это, не давая значение мусора? я имею в виду, предположим, что длина строки 9 есть, и я перезаписываю ее длиной строки 6. что будет означать 3 значения мусора рт? Правильный. Кроме того, у вас должен быть какой-то способ идентифицировать любого читателя о том, что эти 3 символа являются мусором. Дело в том, что мой код находится между Python и C ++. так что, если чтение файла выполняется в C ++, а запись файла - в python .. оба раза файл должен быть удален ..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

у меня есть временный файл с некоторым содержимым и скрипт python, генерирующий некоторые выходные данные в этот файл. Я хочу, чтобы это повторилось N раз, поэтому мне нужно повторно использовать этот файл (на самом деле массив файлов). Я удаляю весь контент, поэтому временный файл будет пуст в следующем цикле. Для удаления содержимого я использую этот код:

мой вопрос: есть ли другой (лучше, короче и безопаснее) как удалить весь контент без фактического удаления временных файлов с диск?

что-то вроде tempFile.truncateAll() ?

Как удалить только содержимое файла в Python

существует несколько способов установить логический размер файла в 0, в зависимости от того, как вы получаете доступ к этому файлу:

чтобы очистить открытый файл:

чтобы очистить открытый файл, дескриптор которого известен:

очистить закрытый файл (имя которого известно)

у меня есть временный файл С некоторым содержанием [. ] Мне нужно использовать этот файл

это, как говорится, в общем случае это, вероятно, не эффективно и не желательно использовать временный файл. Если у вас нет особых потребностей, вы должны подумать об использовании tempfile.TemporaryFile и контекст менеджер для почти прозрачного создания/использования / удаления временных файлов:

Я думаю, что проще всего просто открыть файл в режиме записи, а затем закрыть его. Например, если ваш файл myfile.dat содержит:

затем вы можете просто написать:

это сотрет все содержимое. Затем вы можете записать новое содержимое в файл:

что может быть проще, чем что-то вроде этого:

это создает 400 временных файлов и записывает 1000 строк в каждый временный файл. Он выполняется менее чем за 1/2 секунды на моей непримечательной машине. Каждый временный файл всего создается и удаляется по мере открытия и закрытия контекстного менеджера в этом случае. Это быстрая, безопасная и кросс-платформа.

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

ОТВЕТЫ

Ответ 1

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

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

Ответ 2

Не полный ответ на расширение ответа ondra

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

Ответ 3

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

Читайте также: