Как очистить txt файл python
Очистка файла
Иногда возникают ситуации, когда надо произвести запись в файл, в котором уже находятся данные. Или просто удалить все содержимое. Рассмотрим, как выполнить очистку этого файла средствами Python 3.
Способы
Очистить файл в Python 3 можно следующими способами:
Рассмотрим эти варианты подробно.
При открытии
Когда файл открывается на запись, то указатель текущего положения в документе может быть расположен в начале или в конце документа. Если указатель в конце, то данные будут дописываться. Нас же интересует вариант, когда указатель расположен в начале.
Здесь w – указывает режим открытия файла на запись в текстовом режиме с размещением указателя в начале. После выполнения этого кода, если существовал указанный файл, то содержимое его очистится. Если его не было, то создастся новый пустой.
Перед закрытием, можно было добавить информацию. Она будет записана с начала файла, а не дописана в конец.
Если надо записывать данные в бинарный файл, то следует использовать режим “wb”.
Если же наоборот, нам нужно добавить информацию в конец файла. При этом старые данные чтобы остались. В этом случае к режиму следует добавить символ +. Режим открытия текстового документа будет “w+”, а бинарного “wb+”.
Дополнительную информацию по режимам открытия можно получить в отдельной статье на нашем сайте.
Перемещение указателя
Если мы открыли файл на запись и не знаем, в каком месте находится указатель. Возможно, мы уже записали какие то данные. Мы можем просто переместить указатель в начало и закрыть его. В этом случае документ будет пустым.
В этом примере открытие сделали специально в режиме дозаписи. После закрытия, даже если в файле были данные, они удалятся.
Вот еще пример, здесь мы записываем данные, потом переносим указатель в начало. После этого еще раз производим запись. В итоге, в конце работы, в файле будет только последняя сделанная запись. Те данные, которые были внесены вначале, благополучно удалятся.
Средствами ОС
Для очистки с помощью средств операционной системы воспользуемся стандартной библиотекой os. Вначале её надо подключить с помощью инструкции import os.
На linux должно пройти следующим образом.
Можно воспользоваться командами cp или cat. Вот пример решения с помощью cat.
Если код исполняется на Windows, то решение может быть таким:
Как стереть содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов
Или, если у вас уже есть открытый файл:
В C ++ вы можете использовать нечто подобное.
Поскольку текстовые файлы являются последовательными, вы не можете напрямую удалять данные на них. Ваши варианты:
Вы не можете «стереть» файл на месте, если вам не нужно стереть конец. Либо довольствуйтесь перезаписью «пустого» значения, либо прочитайте интересующие вас части файла и запишите его в другой файл.
Если для вас важна безопасность, то открытия файла для записи и повторного закрытия будет недостаточно. По крайней мере, некоторая часть информации все еще будет храниться на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
Предположим, например, что файл, который вы стираете, содержит рабочие пароли и должен быть удален сразу после завершения текущей операции.
Нулевое заполнение файла после его использования помогает уничтожить конфиденциальную информацию.
В недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Перезаписывает существующее содержимое строками с нулями.
Обратите внимание, что заполнение нулями не гарантирует вашу безопасность. Если вы действительно обеспокоены, лучше заполнить нулями и использовать специализированную утилиту, например File Shredder или CCleaner, чтобы очистить« пустое »пространство на вашем диске.
Вы должны перезаписать файл. В C ++:
От пользователя @jamylak альтернативная форма open(«filename»,»w»).close()
Открытие файла в режиме «запись» очищает его, вам не нужно специально писать в него:
(вы должны закрыть его, поскольку время, когда файл закрывается автоматически, может зависеть от реализации)
Не полный ответ, а скорее продолжение ответа Ондры
Как удалить содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов
или, в качестве альтернативы, если у вас уже открыт файл:
В C++ вы можете использовать что-то подобное.
не полный ответ больше расширения на ответ Ондры
открытие файла в режиме «запись» очищает его, вам не нужно специально писать ему:
(вы должны закрыть его, так как время автоматического закрытия файла может быть специфичным для реализации)
вы должны перезаписать файл. В C++:
от пользователя @jamylak альтернативная форма open(«filename»,»w»).close() is
присвоение указателя файла null внутри вашей программы просто избавится от этой ссылки на файл. Файл все еще там. Я думаю, что В С stdio.h это то, что вы ищете там. Не уверен насчет Python.
вы не можете «стереть» из файла на месте, если вам не нужно стереть конец. Либо удовлетворитесь перезаписью «пустого» значения, либо прочитайте части файла, о котором вы заботитесь, и запишите его в другой файл.
поскольку текстовые файлы являются последовательными, вы не можете сразу стереть данные на них. Ваши варианты:
посмотреть seek / truncate функция / метод для реализации любой из вышеперечисленных идей. Как Python и C имеют эти функции.
Если безопасность важна для вас, то открытия файла для записи и закрытия его снова будет недостаточно. По крайней мере, часть информации по-прежнему будет на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
предположим, например, что файл, который вы стираете, содержит производственные пароли и должен быть удален сразу после завершения текущей операции.
Zero-заполнение файла после завершения его использования помогает убедитесь, что конфиденциальная информация уничтожена.
в недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Он перезаписывает существующее содержимое строками нулей.
обратите внимание, что нулевое заполнение не гарантирует вашу безопасность. Если вы действительно обеспокоены, вам лучше всего заполнить ноль и используйте специальную утилиту, такую как Файл-Шреддер или CCleaner чтобы протирать ‘пустое’ пространство ваш диск.
Работа с файлами в Python
Введение
В этой статье вы узнаете как организовать работать с файлами в Python 3.
Создайте файл files.py и копируйте туда код из примеров.
Запустить файл можно командой python3 files.py
Создать
Создать файл можно командой open
rb чтение в бинарном режиме
wb запись в бинарном режиме
Открыть файл
Чтобы открыть файл для чтения выполните
Если файл log.txt не существует, он не будет создан
raceback (most recent call last): File «files.py», line 1, in f = open(‘log.txt’, ‘r’) FileNotFoundError: [Errno 2] No such file or directory: ‘log.txt’
Закрыть файл
Чтобы закрыть файл выполните
Имя файла
Пример программы, которая выводит на экран имя файла и режим, в котором он открыт
f = open (‘text.txt’, ‘r’) print (f.name) print (f.mode) f.close()
Если файл log.txt существует, то в терминале вы увидите
Менеджер контекста
Предпочтительнее использовать менеджер контекста для работы с файлами
with open (‘text.txt’, ‘r’) as f: pass print (f.closed)
Прочитать содержимое файла
with open (‘sites.txt’, ‘r’) as f: f_contents = f.read() print (f_contents)
www.urn.su www.heihei.ru www.topbicycle.ru
with open (‘sites.txt’, ‘r’) as f: f_contents = f.readlines() print (f_contents)
[‘www.urn.su\n’, ‘www.heihei.ru\n’, ‘www.topbicycle.ru\n’]
Строки по одной readline
with open (‘sites.txt’, ‘r’) as f: f_contents = f.readline() print (f_contents) f_contents = f.readline() print (f_contents)
Строки по одной без лишних переходов end=»
with open (‘sites.txt’, ‘r’) as f: f_contents = f.readline() print (f_contents, end = ») f_contents = f.readline() print (f_contents, end = »)
Цикл для построчного вывода
with open (‘sites.txt’, ‘r’) as f: for line in f: print (line, end = »)
www.urn.su www.heihei.ru www.topbicycle.ru
Прочитать определённое количество символов
with open (‘sites.txt’, ‘r’) as f: f_contents = f.read(20) print (f_contents)
with open (‘sites.txt’, ‘r’) as f: f_contents = f.read(20) print (f_contents, end = ») f_contents = f.read(20) print (f_contents, end = »)
www.urn.su www.heihei.ru www.topbicycle.
with open (‘sites.txt’, ‘r’) as f: size_to_read = 10 f_contents = f.read(size_to_read) while len(f_contents) > 0: print (f_contents, end = ») f_contents = f.read(size_to_read)
www.urn.su www.heihei.ru www.topbicycle.ru
Выражение f_contents = f.read(size_to_read) нужно для того, чтобы когда файл закончится и f.read(size_to_read) станет нулем len(f_contents) тоже станет нулем и цикл завершится
Перейти в произвольное место seek
Например, вернуться в начало файла
Копирование файлов
Текстовые файлы
Их можно копировать построчно
with open (‘sites.txt’, ‘r’) as rf: with open (‘sites_copy.txt’, ‘w’) as wf: for line in rf: wf.write(line)
www.urn.su www.heihei.ru www.topbicycle.ru
Изображения
Их тоже можно копировать построчно, но открывать и записывать нужно в побитовом режиме. То есть нужно добавлять опцию b
Скачайте изображение велосипеда с сайта TopBicycle.ru или возьмите любую другую картинку
wget https://topbicycle.ru/b/img/stels_pilot_950_MD_26.jpg
ls
with open (‘stels_pilot_950_MD_26.jpg’, ‘rb’) as rf: with open (‘stels_pilot_950_MD_26_copy.jpg’, ‘wb’) as wf: for line in rf: wf.write(line)
python3 files.py
ls
Более правильным подходом считается копирование не в построчном режиме а частями с фиксированным размером
with open (‘stels_pilot_950_MD_26.jpg’, ‘rb’) as rf: with open (‘stels_pilot_950_MD_26_copy.jpg’, ‘wb’) as wf: chunk_size = 4096 rf_chunk = rf.read(chunk_size) while len(rf_chunk) > 0: wf.write(rf_chunk) rf_chunk = rf.read(chunk_size)
Записать файл
Чтобы очистить файл от старого содержимого и записать в него новое используется опция w (write)
with open (‘log.txt’, ‘w’) as f: f.write(«some text»)
Дописать в файл
with open (‘log.txt’, ‘a’) as f: f.write(«some text»)
Записать json в файл
import json # нужно где-то взять json r = urllib.request.urlopen(‘http://urn.su/api/v1/getjson’) rr = r.read() rj = json.loads(rr) with open (‘file.txt’, ‘w’) as f: json.dump(rj, f)
Удалить первые несколько строк файла
with open (‘log.txt’, ‘a’) as fin: data = fin.readlines()[1:] with open (‘new.txt’, ‘w’) as fout: fout.writelines(data)
Запись вывода программы в файл
Если вы запускаете скрипт из терминала, воспользуйтесь перенаправлением
python script.py > script.log
В самом скрипте можно временно подменить стандартный вывод.
Допустим я делаю запрос к API
Тоже самое, если приходит json и хочется записать его красиво
Как удалить только содержимое файла в Python
у меня есть временный файл с некоторым содержимым и скрипт python, генерирующий некоторые выходные данные в этот файл. Я хочу, чтобы это повторилось N раз, поэтому мне нужно повторно использовать этот файл (на самом деле массив файлов). Я удаляю весь контент, поэтому временный файл будет пуст в следующем цикле. Для удаления содержимого я использую этот код:
мой вопрос: есть ли другой (лучше, короче и безопаснее) как удалить весь контент без фактического удаления временных файлов с диск?
4 ответов
Как удалить только содержимое файла в Python
существует несколько способов установить логический размер файла в 0, в зависимости от того, как вы получаете доступ к этому файлу:
чтобы очистить открытый файл:
чтобы очистить открытый файл, дескриптор которого известен:
очистить закрытый файл (имя которого известно)
у меня есть временный файл С некоторым содержанием [. ] Мне нужно использовать этот файл
это, как говорится, в общем случае это, вероятно, не эффективно и не желательно использовать временный файл. Если у вас нет особых потребностей, вы должны подумать об использовании tempfile.TemporaryFile и контекст менеджер для почти прозрачного создания/использования / удаления временных файлов:
Я думаю, что проще всего просто открыть файл в режиме записи, а затем закрыть его. Например, если ваш файл myfile.dat содержит:
затем вы можете просто написать:
это сотрет все содержимое. Затем вы можете записать новое содержимое в файл:
что может быть проще, чем что-то вроде этого:
это создает 400 временных файлов и записывает 1000 строк в каждый временный файл. Он выполняется менее чем за 1/2 секунды на моей непримечательной машине. Каждый временный файл всего создается и удаляется по мере открытия и закрытия контекстного менеджера в этом случае. Это быстрая, безопасная и кросс-платформа.
С помощью tempfile намного лучше, чем пытаться изобрести его.