Bagaimana cara menghapus isi file dari file teks dengan Python?

140

Saya memiliki file teks yang ingin saya hapus dengan Python. Bagaimana aku melakukan itu?

Orang udik
sumber
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.

ondra
sumber
#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.

Contoh sederhana

Snigdha Batra
sumber
21

Membuka file dalam mode "tulis" mengosongkannya, Anda tidak perlu secara khusus menulisnya:

open("filename", "w").close()

(Anda harus menutupnya sebagai waktu kapan file akan ditutup secara otomatis mungkin spesifik untuk implementasi)

Douglas Leeder
sumber
10

Dari user @jamylak bentuk alternatif open("filename","w").close()is

with open('filename.txt','w'): pass
CasualCoder3
sumber
8

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.

wcyn
sumber
1
Ini seharusnya tidak mengejutkan, itu disebutkan dalam jawaban ini 3 tahun sebelumnya.
AMC
6

Anda harus menimpa file. Dalam C ++:

#include <fstream>

std::ofstream("test.txt", std::ios::out).close();
Alex Korban
sumber
1
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.

bsberry
sumber
2
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.

Nick
sumber
0

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.

Ignacio Vazquez-Abrams
sumber
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.

nosklo
sumber
saya hanya ingin menghapus seluruh file dari awal
Hick
2
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"
    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

Ini berhasil untuk saya

Mohd Tauovir Khan
sumber
0

Anda juga dapat menggunakan ini (berdasarkan beberapa jawaban di atas):

file = open('filename.txt', 'w')
file.write('')
file.close

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!

sujay simha
sumber