Очистка файла
Иногда возникают ситуации, когда надо произвести запись в файл, в котором уже находятся данные. Или просто удалить все содержимое. Рассмотрим, как выполнить очистку этого файла средствами Python 3.
Способы
Очистить файл в Python 3 можно следующими способами:
- При открытии использовать режим, в котором указатель находится в начале документа.
- Вручную переместить указатель в начальную позицию.
- Средствами операционной системы обнулить содержимое файла.
Рассмотрим эти варианты подробно.
При открытии
Когда файл открывается на запись, то указатель текущего положения в документе может быть расположен в начале или в конце документа. Если указатель в конце, то данные будут дописываться. Нас же интересует вариант, когда указатель расположен в начале.
f = open('test.txt', 'w') f.close()
Здесь w – указывает режим открытия файла на запись в текстовом режиме с размещением указателя в начале. После выполнения этого кода, если существовал указанный файл, то содержимое его очистится. Если его не было, то создастся новый пустой.
Перед закрытием, можно было добавить информацию. Она будет записана с начала файла, а не дописана в конец.
f = open('test.txt', 'w') f.write('something') f.close()
Если надо записывать данные в бинарный файл, то следует использовать режим “wb”.
Если же наоборот, нам нужно добавить информацию в конец файла. При этом старые данные чтобы остались. В этом случае к режиму следует добавить символ +. Режим открытия текстового документа будет “w+”, а бинарного “wb+”.
Дополнительную информацию по режимам открытия можно получить в отдельной статье на нашем сайте.
Перемещение указателя
Если мы открыли файл на запись и не знаем, в каком месте находится указатель. Возможно, мы уже записали какие то данные. Мы можем просто переместить указатель в начало и закрыть его. В этом случае документ будет пустым.
f = open('test.txt', 'w+') f.seek(0) f.close()
В этом примере открытие сделали специально в режиме дозаписи. После закрытия, даже если в файле были данные, они удалятся.
Вот еще пример, здесь мы записываем данные, потом переносим указатель в начало. После этого еще раз производим запись. В итоге, в конце работы, в файле будет только последняя сделанная запись. Те данные, которые были внесены вначале, благополучно удалятся.
f = open('test.txt', 'w+') f.write('something string') f.seek(0) f.write('new string') f.close()
Средствами ОС
Для очистки с помощью средств операционной системы воспользуемся стандартной библиотекой os. Вначале её надо подключить с помощью инструкции import os.
На linux должно пройти следующим образом.
import os os.system(r' >file.txt')
Можно воспользоваться командами cp или cat. Вот пример решения с помощью cat.
os.system(r'cat /dev/null>file.txt')
Если код исполняется на Windows, то решение может быть таким:
os.system(r'nul>file.txt')
Удаление содержимого файла
Есть ли у файла метод удаления содержимого файла? Мне нужно не просто удалить файл, а именно удалить все содержимое файла, при этом, получается, должен остаться просто пустой файл. Пробовал через перезапись с пустой строкой но выдает ошибку
with open("text_here", "w") as f: f.write(")
io.UnsupportedOperation: not writable
Отслеживать
задан 11 дек 2017 в 8:54
191 2 2 серебряных знака 14 14 бронзовых знаков
Достаточно просто открыть файл на запись. open(«text_here», «w») .
11 дек 2017 в 8:57
а файл разрешен для записи? Если у вас права только на чтение то это уже проблематичнее.
11 дек 2017 в 9:00
В этом примере у вас кавычка не закрыта. В реальном коде так же?
11 дек 2017 в 9:54
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
io.UnsupportedOperation: not writable
говорит о том, что вы пытаетесь осуществить запись в дескриптор, который не предназначен для этого. Например, если открыли файл только на чтение (mode=’r’)
Как подсказывают в комментариях, достаточно просто открыть файл на запись:
with open('file.name', 'wb'): pass
Отслеживать
ответ дан 11 дек 2017 в 10:03
1,582 8 8 серебряных знаков 10 10 бронзовых знаков
- python
- файлы
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.26.3951
Как стереть содержимое текстового файла в Python?
Не полный ответ больше, чем расширение ответа ondra При использовании truncate() (моего предпочтительного метода) убедитесь, что ваш курсор находится в необходимой позиции. Когда открывается новый файл для чтения — open(‘FILE_NAME’,’r’) по умолчанию курсор находится на 0. Но если вы разобрали файл внутри вашего кода, убедитесь, что снова указываете в начале файла, т.е. truncate(0) По умолчанию truncate() обрезает содержимое файла, начиная с текущей позиции cusror. Простой пример
Поделиться 02 января 2014 в 09:33
Как предложил @jamylak, хорошая альтернатива, которая включает в себя преимущества контекстных менеджеров , это:
with open('filename.txt', 'w'): pass
Поделиться 12 апреля 2017 в 10:37
При использовании with open(«myfile.txt», «r+») as my_file: , я получаю странные нули в myfile.txt , особенно потому, что я сначала читаю файл. Чтобы это работало, мне пришлось сначала изменить указатель my_file на начало файла с помощью my_file.seek(0) . Затем я смог сделать my_file.truncate() , чтобы очистить файл.
Поделиться 24 июля 2017 в 13:14
Если безопасность важна для вас, то открыть файл для записи и закрыть его снова будет недостаточно. По крайней мере, часть информации все еще будет находиться на запоминающем устройстве и может быть найдена, например, с помощью утилиты восстановления диска. Предположим, например, файл, который вы стираете, содержит производственные пароли и должен быть удален сразу после завершения текущей операции. Нулевое заполнение файла после его использования помогает гарантировать уничтожение конфиденциальной информации. В недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Он перезаписывает существующее содержимое строками нулей.
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)
Обратите внимание, что нулевое заполнение не гарантирует вашу безопасность. Если вы действительно обеспокоены, вам лучше всего использовать нулевое заполнение и использовать специальную утилиту, такую как Файл Шреддер или Клинер, чтобы очистить ‘пустое’ пространство на вашем диске.
Поделиться 17 апреля 2018 в 22:36
Написание и чтение содержимого файла
def writeTempFile(text = None): filePath = "/temp/file1.txt" if not text: # If not provided return file content f = open(filePath, "r") slug = f.read() return slug else: f = open(filePath, "a") # Create a blank file f.seek(0) # sets point at the beginning of the file f.truncate() # Clear previous content f.write(text) # Write file f.close() # Close file return text
Это сработало для меня
Поделиться 27 апреля 2020 в 23:38
Вы также можете использовать это (на основе нескольких из вышеперечисленных ответов):
file = open('filename.txt', 'w') file.close()
конечно, это действительно плохой способ очистить файл, потому что он требует столько строк кода, но я просто написал это, чтобы показать вам, что это также можно сделать с помощью этого метода. счастливого кодирования!
Поделиться 29 июля 2020 в 10:49
Вам необходимо перезаписать файл. В C++:
#include std::ofstream("test.txt", std::ios::out).close();
Поделиться 04 мая 2010 в 21:33
Вы не можете «стереть» файл на месте, если вам не нужно стереть конец. Либо вы будете довольны перезаписью пустого значения, либо прочтите интересующие вас части файла и запишите их в другой файл.
Поделиться 04 мая 2010 в 21:23
Указатель на файл с значением null внутри вашей программы просто избавится от этой ссылки на файл. Файл все еще есть. Я думаю, что функция remove() в c stdio.h — это то, что вы там ищете. Не уверен в Python.
Поделиться 04 мая 2010 в 21:27
- Самый распространенный способ — создать новый файл. Прочитать из исходного файла и записать все в новый файл, кроме той части, которую вы хотите стереть. Когда весь файл будет написан, удалите старый файл и переименуйте новый файл, чтобы он имел исходное имя.
- Вы также можете усечь и переписать весь файл из той точки, которую вы хотите изменить, и прочитать остальной файл в память. Стремитесь вернуться к той же точке, усечьте файл и записать содержимое без той части, которую вы хотите стереть.
- Другой простой вариант — перезаписать данные с другими данными той же длины. Для этого найдите точную позицию и запишите новые данные. Ограничение заключается в том, что они должны иметь точно такую же длину.
Посмотрите на функцию/метод seek / truncate , чтобы реализовать любую из вышеперечисленных идей. И Python, и C имеют эти функции.
Открытие и закрытие файлов — Python: Основы текстового ввода-вывода
В Python файл открывается с помощью функции open , которой нужно передать путь до файла и режим. С путём всё понятно. А режим нужен для того, чтобы указать то, как мы хотим использовать файл: будем ли мы записывать или читать, будем работать с текстом или же с бинарными данными, хотим ли мы очистить файл перед записью в него. Пока мы будем работать с файлами в самых простых режимах: чтение и запись текста.
Чтобы что-то прочитать из файла, надо бы его создать и что-то в него записать. С этого и начнём. Откроем файл на запись:
f = open('foo.txt', 'w') f #
Переменная f теперь ссылается на некий файловый объект. Пусть вас не пугает имя типа, пока вы можете обращать внимание только на параметры — name , mode и encoding . Имя и режим те, что мы указали при вызове open , а кодировка encoding выбрана умолчательная — UTF-8 (практически всегда именно она вам и будет нужна).
Итак, файл мы открыли. Закрывается он так:
… f.close() f.closed # True
closed здесь — атрибут объекта f . Атрибуты — это такие переменные внутри связанного объекта.
Автоматическое закрытие файла
Вы уже знаете, что Python — язык с автоматическим управлением памятью. Зная это, можно догадаться, что среда исполнения закрывает файл, когда удаляется последняя ссылка на файловый объект. Легко и просто!
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: