Как стереть содержимое текстового файла в 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 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')
Удаление файла — пошаговое руководство
Спектр применения различных файлов огромен. Именно поэтому умение их удалять — важный навык. С помощью Python вы можете удалить любой файл на компьютере.
Допустим, вы пишете программу, которая анализирует статистику фондового индекса S&P 500 и записывает ее в файл. Возможно, вы хотите удалить уже существующий файл, чтобы освободить место для нового.
Метод os.remove() позволит вам удалить файл, а метод os.rmdir() — пустую папку. Если нужно удалить папку вместе с файлами внутри, можно воспользоваться методом shutil.rmtree() .
В этом руководстве мы научимся удалять файлы с помощью вышеуказанных методов, а также рассмотрим примеры их использования.
Руководство по удалению файлов
Как уже было сказано, в Python есть несколько методов для удаления файлов — os.remove() , os.rmdir() и shutil.rmtree() . Предназначены они для удаления файлов, директорий и папок с файлами внутри соответственно.
Как удалить файл с помощью метода os.remove()
Метод os.remove() используется для удаления файлов с жесткого диска. Важно: с его помощью нельзя удалить папку, только файл.
Модуль os позволяет разработчикам работать с операционной и файловой системой компьютера. os.remove — метод для удаления отдельных файлов, встроенный в модуль os .
Начать работу с этим методом просто — нужно импортировать модуль os с помощью оператора import .
import os
Теперь мы готовы удалять файлы с помощью метода os.remove() . Рассмотрим синтаксис этого метода:
import os os.remove(путь_к_файлу)
Метод os.remove() принимает один параметр — путь к файлу, который мы хотим удалить.
Допустим, мы пишем программу, которая анализирует оценки учеников математического класса в течение года.
Наши данные мы будем хранить в файле /home/school/math/final_analysis.csv. Но создавать файл сразу нельзя: возможно, он уже существует.
Чтобы удалить этот файл, можно написать следующую программу:
import os path = "/home/school/math/final_analysis.csv" os.remove(path) print("final_analysis.csv удален.")
Файл удален. Также мы вывели сообщение с помощью оператора print() :
final_analysis.csv удален.
В первой строке программы мы импортируем модуль os . В нем содержится метод os.remove() , который мы использовали в нашей программе. Затем мы объявляем переменную path . Эта переменная хранит себе путь к файлу, который мы хотим удалить.
Затем мы вызываем os.remove() и передаем в качестве аргумента path . После этого происходит удаление файла.
Удаление пустой директории с помощью os.rmdir()
Метод os.remove() не позволяет удалить папку. В этом вам поможет метод os.rmdir() , который используется для удаления пустых файлов и директорий.
Метод os.rmdir() принимает лишь один параметр — путь к папке, которую вы хотите удалить. Синтаксис этого метода выглядит так:
import os os.rmdir(file_path)
Допустим, мы решили хранить наши обработанные данные внутри папки final, которая находится внутри /home/school/math directory. После запуска программы мы эту папку удаляем, ведь создаем точно такую же новую. Для удаления папки final можно написать следующую программу:
import os path = "/home/school/math/final" os.rmdir(path) print("/home/school/math/final удалена.")
Наша программа удаляет директорию /home/school/math/final и печатает в консоль следующее:
/home/school/math/final удалена.
Метод os.rmdir() используется для удаления только пустых директорий. Если внутри папки будут содержаться файлы, программа вернет ошибку:
[Errno 13] Permission denied: '/home/school/math/final' Directory 'final' can not be removed
Допустим, вы пишете программу для удаления файлов. Вам может понадобиться функция, корректно обрабатывающая ошибки в случае их возникновения. В этом случае вам поможет блок try except .
В примерах выше мы видели, что в некоторых случаях может быть возвращена ошибка (например, если методу не хватает прав для удаления объекта). Если мы используем os.remove() для удаления директории — программа вернет ошибку. И если мы используем os.rmdir() для удаления папки, содержащей файлы, тоже будет возвращена ошибка.
Когда вы пишете программу, удаляющую файлы, вам может понадобиться функция, которая обрабатывает ошибки. Здесь вам пригодится блок except :
В примере вы видите использование того же метода os.rmdir() , но с механизмом обработки ошибок. В случае возникновения ошибки этот механизм выводит заранее определенное сообщение.
import os path = "/home/school/math/final" try: os.rmdir(path) print("/home/school/math/final удален.") except OSError as error: print("Возникла ошибка.")
Если мы запустим этот код и ошибок не возникнет, то папка будет удалена и в консоль выведется следующее:
/home/school/math/final удален.
Но если попытаться удалить тем же способом папку, содержащую файлы, программа выведет в консоль следующее сообщение:
Возникла ошибка.
В нашей программе мы использовали блок except . Выполнение начинается с проверки блока try . Если возникает ошибка — выполняется код внутри блока except . То есть, этот блок выполняется при возникновении ошибки OSError.
Удаление папки с файлами с помощью shutil.rmtree()
В библиотеке shutil есть метод shutil.rmtree() . Он используется для удаления папок, содержащих файлы.
Вообще эта библиотека предлагает сразу несколько методов, позволяющих проводить манипуляции с файловой системой. Но сейчас мы поговорим о shutil.rmtree() , с помощью которого можно удалить папку вместе с содержащимися в ней файлами.
Синтаксис метода shutil.rmtree() выглядит так:
import shutil shutil.rmtree(file_path)
Обратите внимание — мы импортируем модуль shutil . Как и os.remove() , метод shutil.rmtree() является частью внешнего модуля — именно поэтому мы проводим импорт.
Чтобы лучше понять метод, рассмотрим пример. Допустим, что программа для анализа оценок должна удалить директорию final. Но в ней уже хранятся файлы. Для удаления этой директории и всех файлов в ней мы можем написать следующую программу:
import shutil path = "/home/school/math/final" shutil.rmtree(path) print("/home/school/math/final удалена.")
Наша программа удаляет папку final и все ее содержимое. После этого в консоль выводится следующее сообщение:
/home/school/math/final удалена.
Удаление содержимого файла
Есть ли у файла метод удаления содержимого файла? Мне нужно не просто удалить файл, а именно удалить все содержимое файла, при этом, получается, должен остаться просто пустой файл. Пробовал через перезапись с пустой строкой но выдает ошибку
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.17.3574