Câu trả lời:
Trong trăn:
open('file.txt', 'w').close()
Hoặc cách khác, nếu bạn đã mở tệp:
f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
Trong C ++, bạn có thể sử dụng một cái gì đó tương tự.
#include<fstream>và sau đó std::ofstream("file.txt");ngắn như trong Python. :)
f.seek(0)vào sau f.truncate(0), nếu không bạn sẽ có \ x00 kỳ lạ được thêm vào lúc bắt đầu tệp.
Không phải là một câu trả lời đầy đủ hơn về một phần mở rộng cho câu trả lời của ondra
Khi sử dụng truncate()(phương pháp ưa thích của tôi), đảm bảo con trỏ của bạn ở vị trí cần thiết. Khi một tệp mới được mở để đọc - open('FILE_NAME','r')con trỏ của nó ở mức 0 theo mặc định. Nhưng nếu bạn đã phân tích tệp trong mã của mình, hãy đảm bảo trỏ vào đầu tệp một lần nữa, truncate(0)
theo mặc định, truncate()cắt ngắn nội dung của tệp bắt đầu từ vị trí cusror hiện tại.
Mở một tập tin trong chế độ "ghi" sẽ xóa nó, bạn không nhất thiết phải ghi vào nó:
open("filename", "w").close()
(bạn nên đóng nó vì thời điểm khi tệp được đóng tự động có thể được triển khai cụ thể)
Từ người dùng @jamylak, một hình thức thay thế open("filename","w").close()là
with open('filename.txt','w'): pass
Khi sử dụng with open("myfile.txt", "r+") as my_file:, tôi nhận được số không lạ myfile.txt, đặc biệt là khi tôi đang đọc tệp đầu tiên. Để nó hoạt động, trước tiên tôi phải thay đổi con trỏ my_fileđến đầu tập tin với my_file.seek(0). Sau đó tôi có thể làm my_file.truncate()để xóa các tập tin.
Bạn phải ghi đè lên tập tin. Trong C ++:
#include <fstream>
std::ofstream("test.txt", std::ios::out).close();
close()cuộc gọi. Hàm hủy sẽ đóng tệp. Vì vậy, bạn chỉ cần tạo tạm thời:ofstream("test.txt");
Việc chỉ định con trỏ tệp thành null trong chương trình của bạn sẽ loại bỏ tham chiếu đó đến tệp. Các tập tin vẫn còn đó. Tôi nghĩ rằng remove()chức năng trong c stdio.hlà những gì bạn đang tìm kiếm ở đó. Không chắc chắn về Python.
Nếu bảo mật là quan trọng đối với bạn thì mở tệp để ghi và đóng lại sẽ không đủ. Ít nhất một số thông tin sẽ vẫn còn trên thiết bị lưu trữ và có thể được tìm thấy, ví dụ, bằng cách sử dụng tiện ích khôi phục đĩa.
Giả sử, ví dụ, tệp bạn đang xóa chứa mật khẩu sản xuất và cần phải xóa ngay sau khi hoàn tất thao tác hiện tại.
Không điền vào tệp sau khi bạn sử dụng xong, nó giúp đảm bảo thông tin nhạy cảm bị hủy.
Trong một dự án gần đây, chúng tôi đã sử dụng đoạn mã sau, hoạt động tốt cho các tệp văn bản nhỏ. Nó ghi đè lên các nội dung hiện có với các dòng số không.
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)
Lưu ý rằng không điền sẽ không đảm bảo an ninh của bạn. Nếu bạn thực sự lo lắng, tốt nhất bạn nên điền vào không và sử dụng tiện ích chuyên dụng như File Shredder hoặc CCleaner để xóa sạch không gian 'trống' trên ổ đĩa của bạn.
Bạn không thể "xóa" khỏi tệp tại chỗ trừ khi bạn cần xóa phần cuối. Có thể là nội dung với phần ghi đè của giá trị "trống" hoặc đọc các phần của tệp bạn quan tâm và ghi nó vào tệp khác.
Vì các tệp văn bản là tuần tự, bạn không thể xóa dữ liệu trực tiếp trên chúng. Lựa chọn của bạn là:
Nhìn vào seek/ truncatefunction / phương thức để thực hiện bất kỳ ý tưởng nào ở trên. Cả Python và C đều có các chức năng đó.
os.removehoặc os.unlinktrong python, hoặc unlinktrong C. Một tùy chọn khác là chỉ mở lại tệp để viết hoặc sử dụng truncate.
Viết và đọc nội dung tập tin
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
Nó làm việc cho tôi