orang yang telah memberikan jawaban mengatakan bahwa itu tidak mungkin .. jadi apakah Anda ingin memberi tahu saya cara mudah melakukannya dengan python?
Hick
Jawaban:
279
Dengan python:
open('file.txt','w').close()
Atau sebagai alternatif, jika Anda sudah membuka file:
f = open('file.txt','r+')
f.truncate(0)# need '0' when using r+
Di C ++, Anda bisa menggunakan sesuatu yang serupa.
#include<fstream>dan kemudian std::ofstream("file.txt");sesingkat dalam Python. :)
wilhelmtell
8
alasan ini berfungsi (baik dalam C ++ dan python) adalah karena secara default ketika Anda membuka file untuk menulis, itu memotong konten yang ada. Jadi sebenarnya ini semacam efek samping, dan karena itu saya lebih suka panggilan eksplisit untuk memotong () untuk alasan kejelasan, meskipun itu tidak perlu.
rmeador
7
jika Anda telah membuka file menggunakan "r +", gunakan truncate (0) jika Anda memiliki file yang diuraikan, yang kemungkinan Anda miliki. Tambahkan ini ke jawaban di atas untuk menyelesaikannya!
Johan Engblom
3
gunakan f.seek (0) untuk memindahkan pointer ke awal file
Johan Engblom
Saya sedang membaca serta menulis ke file. Jawabannya sempurna memotong file, tapi berhati-hatilah jika Anda ingin menulis sesuatu untuk itu lagi jangan lupa untuk menambahkan f.seek(0)setelah f.truncate(0), lain Anda akan memiliki aneh \ x00 ditambahkan pada awal file.
krishna chaitanya
29
Bukan jawaban yang lengkap dari ekstensi untuk jawaban ondra
Saat menggunakan truncate()(metode pilihan saya) pastikan kursor Anda pada posisi yang diperlukan. Ketika file baru dibuka untuk dibaca - open('FILE_NAME','r')kursornya adalah 0 secara default. Tetapi jika Anda telah mem-parsing file di dalam kode Anda, pastikan untuk menunjuk pada awal file lagi yaitu truncate(0)
secara default truncate()memotong isi file mulai dari posisi cusror saat ini.
Saat menggunakan with open("myfile.txt", "r+") as my_file:, saya mendapatkan nol aneh myfile.txt, terutama karena saya membaca file terlebih dahulu. Agar berfungsi, saya harus terlebih dahulu mengubah pointer my_fileke awal file dengan my_file.seek(0). Maka saya bisa lakukan my_file.truncate()untuk menghapus file.
Tidak perlu close()menelepon. Destructor akan menutup file. Jadi, Anda hanya perlu membuat sementara:ofstream("test.txt");
wilhelmtell
Pertanyaan ini telah berubah sejak jawaban ini. Mungkin menghapus pertanyaan mengingat arah pertanyaan yang baru?
Seanny123
1
Menetapkan file pointer ke nol di dalam program Anda hanya akan menyingkirkan referensi ke file tersebut. File itu masih ada di sana. Saya pikir remove()fungsi dalam c stdio.hadalah apa yang Anda cari di sana. Tidak yakin tentang Python.
BTW, keduanya menghapus () dan membatalkan tautan () akan mengurangi jumlah referensi pada file biasa, tidak benar-benar menghapusnya. File akan dihapus setelah jumlah referensi turun menjadi nol. Sebagai contoh, jika proses Anda memiliki file terbuka dan Anda memanggil membatalkan tautan () atau menghapus () di atasnya, itu tidak akan dihapus sampai file ditutup () d (yaitu jumlah ref turun menjadi nol - juga mengasumsikan tidak ada proses lain buka file). Perilaku ini bermanfaat, misalnya, untuk memastikan file sementara tidak tertinggal setelah proses penghentian yang tidak normal (mis. Buka (), batalkan tautan (), lakukan file IO, CRASH , tutup () TIDAK dipanggil).
Void
1
Jika keamanan penting bagi Anda maka membuka file untuk menulis dan menutupnya lagi tidak akan cukup. Setidaknya beberapa informasi masih ada di perangkat penyimpanan dan dapat ditemukan, misalnya, dengan menggunakan utilitas pemulihan disk.
Misalkan, misalnya, file yang Anda hapus berisi kata sandi produksi dan perlu segera dihapus setelah operasi ini selesai.
Mengisi nol file setelah Anda selesai menggunakannya membantu memastikan informasi sensitif dihancurkan.
Pada proyek terbaru kami menggunakan kode berikut, yang bekerja dengan baik untuk file teks kecil. Ini menimpa konten yang ada dengan garis nol.
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)
Perhatikan bahwa pengisian nol tidak akan menjamin keamanan Anda. Jika Anda benar-benar khawatir, Anda sebaiknya mengisi nol dan menggunakan utilitas khusus seperti File Shredder atau CCleaner untuk membersihkan ruang kosong di drive Anda.
Anda tidak dapat "menghapus" dari file di tempat kecuali Anda harus menghapus akhirnya. Entah puas dengan menimpa nilai "kosong", atau baca bagian file yang Anda pedulikan dan tuliskan ke file lain.
ok bagaimana cara menimpanya tanpa memberikan nilai sampah? Maksud saya anggap panjang string 9 ada di sana dan saya menimpanya dengan panjang string 6. itu berarti 3 nilai sampah rt?
Hick
Benar. Plus, Anda harus memiliki beberapa cara untuk mengidentifikasi kepada setiap pembaca fakta bahwa 3 karakter itu sampah.
Ignacio Vazquez-Abrams
kenyataannya adalah kode saya membentang antara python dan c ++. jadi jika file membaca dilakukan dalam C ++ dan file tulis dengan python .. kedua waktu file tersebut harus dihapus ..
Hick
0
Karena file teks berurutan, Anda tidak dapat menghapus data secara langsung. Pilihan Anda adalah:
Cara paling umum adalah membuat file baru. Baca dari file asli dan tulis semuanya pada file baru, kecuali bagian yang ingin Anda hapus. Ketika semua file telah ditulis, hapus file lama dan ganti nama file baru sehingga memiliki nama asli.
Anda juga dapat memotong dan menulis ulang seluruh file dari titik yang ingin Anda ubah dan seterusnya. Cari titik yang ingin Anda ubah, dan baca sisa file ke memori. Cari kembali ke titik yang sama, potong file, dan tulis kembali konten tanpa bagian yang ingin Anda hapus.
Pilihan sederhana lainnya adalah menimpa data dengan data lain dengan panjang yang sama. Untuk itu, cari ke posisi yang tepat dan tulis data baru. Batasannya adalah panjangnya harus sama persis.
Lihatlah seek/ truncatefungsi / metode untuk mengimplementasikan ide-ide di atas. Baik Python dan C memiliki fungsi-fungsi itu.
Kemudian hapus saja file tersebut. Gunakan os.removeatau os.unlinkdengan python, atau unlinkdalam C. Opsi lain adalah membuka kembali file untuk ditulis atau digunakan truncate.
nosklo
0
Menulis dan Membaca konten file
def writeTempFile(text =''):
filePath ="/temp/file1.txt"ifnot 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 filereturn text
tentu saja ini adalah cara yang sangat buruk untuk menghapus file karena membutuhkan begitu banyak baris kode, tetapi saya hanya menulis ini untuk menunjukkan kepada Anda bahwa itu dapat dilakukan dalam metode ini juga.
Jawaban:
Dengan python:
Atau sebagai alternatif, jika Anda sudah membuka file:
Di C ++, Anda bisa menggunakan sesuatu yang serupa.
sumber
#include<fstream>
dan kemudianstd::ofstream("file.txt");
sesingkat dalam Python. :)f.seek(0)
setelahf.truncate(0)
, lain Anda akan memiliki aneh \ x00 ditambahkan pada awal file.Bukan jawaban yang lengkap dari ekstensi untuk jawaban ondra
Saat menggunakan
truncate()
(metode pilihan saya) pastikan kursor Anda pada posisi yang diperlukan. Ketika file baru dibuka untuk dibaca -open('FILE_NAME','r')
kursornya adalah 0 secara default. Tetapi jika Anda telah mem-parsing file di dalam kode Anda, pastikan untuk menunjuk pada awal file lagi yaitutruncate(0)
secara defaulttruncate()
memotong isi file mulai dari posisi cusror saat ini.Contoh sederhana
sumber
Membuka file dalam mode "tulis" mengosongkannya, Anda tidak perlu secara khusus menulisnya:
(Anda harus menutupnya sebagai waktu kapan file akan ditutup secara otomatis mungkin spesifik untuk implementasi)
sumber
Dari user @jamylak bentuk alternatif
open("filename","w").close()
issumber
Saat menggunakan
with open("myfile.txt", "r+") as my_file:
, saya mendapatkan nol anehmyfile.txt
, terutama karena saya membaca file terlebih dahulu. Agar berfungsi, saya harus terlebih dahulu mengubah pointermy_file
ke awal file denganmy_file.seek(0)
. Maka saya bisa lakukanmy_file.truncate()
untuk menghapus file.sumber
Anda harus menimpa file. Dalam C ++:
sumber
close()
menelepon. Destructor akan menutup file. Jadi, Anda hanya perlu membuat sementara:ofstream("test.txt");
Menetapkan file pointer ke nol di dalam program Anda hanya akan menyingkirkan referensi ke file tersebut. File itu masih ada di sana. Saya pikir
remove()
fungsi dalam cstdio.h
adalah apa yang Anda cari di sana. Tidak yakin tentang Python.sumber
Jika keamanan penting bagi Anda maka membuka file untuk menulis dan menutupnya lagi tidak akan cukup. Setidaknya beberapa informasi masih ada di perangkat penyimpanan dan dapat ditemukan, misalnya, dengan menggunakan utilitas pemulihan disk.
Misalkan, misalnya, file yang Anda hapus berisi kata sandi produksi dan perlu segera dihapus setelah operasi ini selesai.
Mengisi nol file setelah Anda selesai menggunakannya membantu memastikan informasi sensitif dihancurkan.
Pada proyek terbaru kami menggunakan kode berikut, yang bekerja dengan baik untuk file teks kecil. Ini menimpa konten yang ada dengan garis nol.
Perhatikan bahwa pengisian nol tidak akan menjamin keamanan Anda. Jika Anda benar-benar khawatir, Anda sebaiknya mengisi nol dan menggunakan utilitas khusus seperti File Shredder atau CCleaner untuk membersihkan ruang kosong di drive Anda.
sumber
Anda tidak dapat "menghapus" dari file di tempat kecuali Anda harus menghapus akhirnya. Entah puas dengan menimpa nilai "kosong", atau baca bagian file yang Anda pedulikan dan tuliskan ke file lain.
sumber
Karena file teks berurutan, Anda tidak dapat menghapus data secara langsung. Pilihan Anda adalah:
Lihatlah
seek
/truncate
fungsi / metode untuk mengimplementasikan ide-ide di atas. Baik Python dan C memiliki fungsi-fungsi itu.sumber
os.remove
atauos.unlink
dengan python, atauunlink
dalam C. Opsi lain adalah membuka kembali file untuk ditulis atau digunakantruncate
.Menulis dan Membaca konten file
Ini berhasil untuk saya
sumber
Anda juga dapat menggunakan ini (berdasarkan beberapa jawaban di atas):
tentu saja ini adalah cara yang sangat buruk untuk menghapus file karena membutuhkan begitu banyak baris kode, tetapi saya hanya menulis ini untuk menunjukkan kepada Anda bahwa itu dapat dilakukan dalam metode ini juga.
selamat coding!
sumber