Как очистить файл в питоне
Очистка файла
Иногда возникают ситуации, когда надо произвести запись в файл, в котором уже находятся данные. Или просто удалить все содержимое. Рассмотрим, как выполнить очистку этого файла средствами Python 3.
Способы
Очистить файл в Python 3 можно следующими способами:
Рассмотрим эти варианты подробно.
При открытии
Когда файл открывается на запись, то указатель текущего положения в документе может быть расположен в начале или в конце документа. Если указатель в конце, то данные будут дописываться. Нас же интересует вариант, когда указатель расположен в начале.
Здесь w – указывает режим открытия файла на запись в текстовом режиме с размещением указателя в начале. После выполнения этого кода, если существовал указанный файл, то содержимое его очистится. Если его не было, то создастся новый пустой.
Перед закрытием, можно было добавить информацию. Она будет записана с начала файла, а не дописана в конец.
Если надо записывать данные в бинарный файл, то следует использовать режим “wb”.
Если же наоборот, нам нужно добавить информацию в конец файла. При этом старые данные чтобы остались. В этом случае к режиму следует добавить символ +. Режим открытия текстового документа будет “w+”, а бинарного “wb+”.
Дополнительную информацию по режимам открытия можно получить в отдельной статье на нашем сайте.
Перемещение указателя
Если мы открыли файл на запись и не знаем, в каком месте находится указатель. Возможно, мы уже записали какие то данные. Мы можем просто переместить указатель в начало и закрыть его. В этом случае документ будет пустым.
В этом примере открытие сделали специально в режиме дозаписи. После закрытия, даже если в файле были данные, они удалятся.
Вот еще пример, здесь мы записываем данные, потом переносим указатель в начало. После этого еще раз производим запись. В итоге, в конце работы, в файле будет только последняя сделанная запись. Те данные, которые были внесены вначале, благополучно удалятся.
Средствами ОС
Для очистки с помощью средств операционной системы воспользуемся стандартной библиотекой os. Вначале её надо подключить с помощью инструкции import os.
На linux должно пройти следующим образом.
Можно воспользоваться командами cp или cat. Вот пример решения с помощью cat.
Если код исполняется на Windows, то решение может быть таким:
Работа с файлами в 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 мы узнали, как управлять ими. В этом руководстве мы узнаем, как удалять файлы в Python.
Предположим, что после успешного создания файла мы выполняем с ним некоторые операции, такие как чтение и запись. Как только мы закончили использовать файл для анализа различных наборов данных, возможно, в некоторых случаях он нам не понадобится в будущем.
Давайте посмотрим на различные способы, с помощью которых мы можем удалять файлы в Python.
1 Использование модуля os
Модуль os в Python предоставляет несколько простых в использовании методов, с помощью которых мы можем удалить или удалить файл, а также пустой каталог. Внимательно посмотрите на приведенный ниже код:
Здесь мы использовали оператор if-else, чтобы избежать исключения, которое может возникнуть, если каталог файлов не существует. Метод isfile() проверяет существование файла с именем файла — ‘new_file.txt’.
Примечание: каталог должен быть пустым. Если он содержит какой-либо контент, метод возвращает ошибку OSerror.
2 Использование модуля shutil
Shutil — это еще один метод удаления файлов, который позволяет пользователю легко удалить файл или его полный каталог (включая все его содержимое).
rmtree() — это метод модуля shutil, который рекурсивно удаляет каталог и его содержимое. Давайте посмотрим, как его использовать:
Для вышеупомянутого кода удален каталог / test /. И самое главное, все содержимое внутри каталога также удаляется.
3 Использование модуля pathlib
pathlib — это встроенный модуль Python, доступный для Python 3.4+.
В приведенном выше примере метод path() используется для получения пути к файлу, тогда как метод unlink() используется для отмены связи или удаления файла по указанному пути.
Метод unlink() работает с файлами. Если указан каталог, возникает ошибка OSError. Чтобы удалить каталог, мы можем прибегнуть к одному из ранее обсужденных методов.
Как удалить содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов
или, в качестве альтернативы, если у вас уже открыт файл:
В C++ вы можете использовать что-то подобное.
не полный ответ больше расширения на ответ Ондры
открытие файла в режиме «запись» очищает его, вам не нужно специально писать ему:
(вы должны закрыть его, так как время автоматического закрытия файла может быть специфичным для реализации)
вы должны перезаписать файл. В C++:
от пользователя @jamylak альтернативная форма open(«filename»,»w»).close() is
присвоение указателя файла null внутри вашей программы просто избавится от этой ссылки на файл. Файл все еще там. Я думаю, что В С stdio.h это то, что вы ищете там. Не уверен насчет Python.
вы не можете «стереть» из файла на месте, если вам не нужно стереть конец. Либо удовлетворитесь перезаписью «пустого» значения, либо прочитайте части файла, о котором вы заботитесь, и запишите его в другой файл.
поскольку текстовые файлы являются последовательными, вы не можете сразу стереть данные на них. Ваши варианты:
посмотреть seek / truncate функция / метод для реализации любой из вышеперечисленных идей. Как Python и C имеют эти функции.
Если безопасность важна для вас, то открытия файла для записи и закрытия его снова будет недостаточно. По крайней мере, часть информации по-прежнему будет на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
предположим, например, что файл, который вы стираете, содержит производственные пароли и должен быть удален сразу после завершения текущей операции.
Zero-заполнение файла после завершения его использования помогает убедитесь, что конфиденциальная информация уничтожена.
в недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Он перезаписывает существующее содержимое строками нулей.
обратите внимание, что нулевое заполнение не гарантирует вашу безопасность. Если вы действительно обеспокоены, вам лучше всего заполнить ноль и используйте специальную утилиту, такую как Файл-Шреддер или CCleaner чтобы протирать ‘пустое’ пространство ваш диск.
Как стереть содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов
Или, если у вас уже есть открытый файл:
В C ++ вы можете использовать нечто подобное.
Поскольку текстовые файлы являются последовательными, вы не можете напрямую удалять данные на них. Ваши варианты:
Вы не можете «стереть» файл на месте, если вам не нужно стереть конец. Либо довольствуйтесь перезаписью «пустого» значения, либо прочитайте интересующие вас части файла и запишите его в другой файл.
Если для вас важна безопасность, то открытия файла для записи и повторного закрытия будет недостаточно. По крайней мере, некоторая часть информации все еще будет храниться на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
Предположим, например, что файл, который вы стираете, содержит рабочие пароли и должен быть удален сразу после завершения текущей операции.
Нулевое заполнение файла после его использования помогает уничтожить конфиденциальную информацию.
В недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Перезаписывает существующее содержимое строками с нулями.
Обратите внимание, что заполнение нулями не гарантирует вашу безопасность. Если вы действительно обеспокоены, лучше заполнить нулями и использовать специализированную утилиту, например File Shredder или CCleaner, чтобы очистить« пустое »пространство на вашем диске.
Вы должны перезаписать файл. В C ++:
От пользователя @jamylak альтернативная форма open(«filename»,»w»).close()
Открытие файла в режиме «запись» очищает его, вам не нужно специально писать в него:
(вы должны закрыть его, поскольку время, когда файл закрывается автоматически, может зависеть от реализации)
Не полный ответ, а скорее продолжение ответа Ондры
