Mam plik tekstowy, który chcę usunąć w Pythonie. Jak mogę to zrobić?
Odpowiedzi:
W Pythonie:
open('file.txt', 'w').close()
Lub alternatywnie, jeśli masz już otwarty plik:
f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
W C ++ możesz użyć czegoś podobnego.
#include<fstream>a potem std::ofstream("file.txt");tak krótkie jak w Pythonie. :)
f.seek(0)później f.truncate(0), w przeciwnym razie na początku pliku pojawi się dziwne \ x00.
Nie jest to pełna odpowiedź, a raczej rozszerzenie odpowiedzi ondry
Korzystając z truncate()(mojej preferowanej metody), upewnij się, że kursor znajduje się w wymaganej pozycji. Gdy nowy plik jest otwierany do odczytu - open('FILE_NAME','r')jego kursor jest domyślnie ustawiony na 0. Ale jeśli przeanalizowałeś plik w swoim kodzie, upewnij się, że ponownie wskazałeś początek pliku, tj. truncate(0)
Domyślnie truncate()obcina zawartość pliku, zaczynając od bieżącej pozycji cusror.
Otwarcie pliku w trybie „zapisu” usuwa go, nie musisz specjalnie do niego pisać:
open("filename", "w").close()
(należy go zamknąć, ponieważ czas automatycznego zamykania pliku może zależeć od implementacji)
Od użytkownika @jamylak alternatywną formą open("filename","w").close()jest
with open('filename.txt','w'): pass
Podczas używania with open("myfile.txt", "r+") as my_file:dostaję dziwne zera myfile.txt, zwłaszcza że najpierw czytam plik. Aby to zadziałało, musiałem najpierw zmienić wskaźnik my_filena początek pliku za pomocą my_file.seek(0). Wtedy mogłem zrobić, my_file.truncate()aby wyczyścić plik.
Musisz nadpisać plik. W C ++:
#include <fstream>
std::ofstream("test.txt", std::ios::out).close();
close()dzwonienia. Destruktor zamknie plik. Musisz więc tylko utworzyć tymczasowy:ofstream("test.txt");
Przypisanie wskaźnika pliku do wartości null w programie po prostu pozbędzie się tego odniesienia do pliku. Plik nadal tam jest. Myślę, że remove()funkcja w c stdio.hjest tym, czego tam szukasz. Nie jestem pewien co do Pythona.
Jeśli bezpieczeństwo jest dla Ciebie ważne, otwarcie pliku do zapisu i ponowne zamknięcie go nie wystarczy. Przynajmniej część informacji będzie nadal znajdować się na urządzeniu magazynującym i można je będzie znaleźć, na przykład, za pomocą narzędzia do odzyskiwania dysków.
Załóżmy na przykład, że usuwany plik zawiera hasła produkcyjne i musi zostać usunięty natychmiast po zakończeniu bieżącej operacji.
Wypełnianie pliku zerami po zakończeniu korzystania z niego pomaga zapewnić zniszczenie poufnych informacji.
W ostatnim projekcie użyliśmy następującego kodu, który działa dobrze w przypadku małych plików tekstowych. Zastępuje istniejącą zawartość liniami zer.
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)
Pamiętaj, że napełnianie zerowe nie gwarantuje bezpieczeństwa. Jeśli naprawdę się martwisz, najlepiej zapełnij zero i użyj specjalistycznego narzędzia, takiego jak File Shredder lub CCleaner, aby wyczyścić `` puste '' miejsce na dysku.
Nie można „wymazać” z pliku na miejscu, chyba że trzeba usunąć koniec. Albo bądź zadowolony z zastąpienia „pustej” wartości, albo przeczytaj części pliku, na których Ci zależy i zapisz je w innym pliku.
Ponieważ pliki tekstowe są sekwencyjne, nie można bezpośrednio usuwać z nich danych. Twoje opcje to:
Spójrz na seek/ truncatefunction / method, aby wdrożyć którykolwiek z powyższych pomysłów. Funkcje te mają zarówno Python, jak i C.
os.removelub os.unlinkw pythonie lub unlinkw C. Inną opcją jest ponowne otwarcie pliku do zapisu lub użycia truncate.
Pisanie i czytanie zawartości plików
def writeTempFile(text = ''):
filePath = "/temp/file1.txt"
if not text: # If blank 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
U mnie zadziałało
Możesz również użyć tego (na podstawie kilku z powyższych odpowiedzi):
file = open('filename.txt', 'w')
file.write('')
file.close()
oczywiście jest to naprawdę zły sposób na wyczyszczenie pliku, ponieważ wymaga tak wielu wierszy kodu, ale napisałem to, aby pokazać, że można to zrobić również w tej metodzie.
miłego kodowania!