ฉันมีไฟล์ข้อความที่ต้องการลบใน Python ฉันจะทำอย่างไร
ฉันมีไฟล์ข้อความที่ต้องการลบใน Python ฉันจะทำอย่างไร
คำตอบ:
ในหลาม:
open('file.txt', 'w').close()
หรือหากคุณมีไฟล์ที่เปิดอยู่แล้ว:
f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
ใน C ++ คุณสามารถใช้สิ่งที่คล้ายกันได้
#include<fstream>แล้วก็std::ofstream("file.txt");สั้นพอ ๆ กับ Python :)
f.seek(0)หลังจากนั้นไม่f.truncate(0)เช่นนั้นคุณจะมี \ x00 แปลก ๆ ต่อท้ายไฟล์
ไม่ใช่คำตอบที่สมบูรณ์ของส่วนขยายเพิ่มเติมสำหรับคำตอบของ ondra
เมื่อใช้truncate()(วิธีที่ฉันต้องการ) ตรวจสอบให้แน่ใจว่าเคอร์เซอร์ของคุณอยู่ในตำแหน่งที่ต้องการ เมื่อเปิดไฟล์ใหม่เพื่ออ่านopen('FILE_NAME','r')เคอร์เซอร์จะอยู่ที่ 0 ตามค่าเริ่มต้น แต่ถ้าคุณแยกวิเคราะห์ไฟล์ภายในโค้ดของคุณแล้วอย่าลืมชี้ที่จุดเริ่มต้นของไฟล์อีกครั้งนั่นคือtruncate(0)
โดยค่าเริ่มต้นจะtruncate()ตัดเนื้อหาของไฟล์โดยเริ่มจากตำแหน่ง cusror ปัจจุบัน
การเปิดไฟล์ในโหมด "เขียน" จะเป็นการล้างข้อมูลคุณไม่จำเป็นต้องเขียนโดยเฉพาะ:
open("filename", "w").close()
(คุณควรปิดเนื่องจากเป็นช่วงเวลาที่ไฟล์ถูกปิดโดยอัตโนมัติอาจเป็นการใช้งานเฉพาะ)
จากผู้ใช้ @jamylak รูปแบบทางเลือกopen("filename","w").close()คือ
with open('filename.txt','w'): pass
เมื่อใช้with open("myfile.txt", "r+") as my_file:ฉันจะได้รับเลขศูนย์แปลก ๆmyfile.txtโดยเฉพาะอย่างยิ่งเมื่อฉันอ่านไฟล์ก่อน เพื่อให้ใช้งานได้ก่อนอื่นฉันต้องเปลี่ยนตัวชี้my_fileไปที่จุดเริ่มต้นของไฟล์ด้วยmy_file.seek(0). จากนั้นฉันสามารถmy_file.truncate()ล้างไฟล์ได้
คุณต้องเขียนทับไฟล์ ใน C ++:
#include <fstream>
std::ofstream("test.txt", std::ios::out).close();
close()โทร ตัวทำลายจะปิดไฟล์ ดังนั้นคุณต้องสร้างชั่วคราว:ofstream("test.txt");
การกำหนดตัวชี้ไฟล์เป็น null ภายในโปรแกรมของคุณจะเป็นการกำจัดการอ้างอิงนั้นไปยังไฟล์ ไฟล์ยังอยู่ที่นั่น ฉันคิดว่าremove()ฟังก์ชันใน c stdio.hคือสิ่งที่คุณกำลังมองหาที่นั่น ไม่แน่ใจเกี่ยวกับ Python
หากความปลอดภัยเป็นสิ่งสำคัญสำหรับคุณการเปิดไฟล์เพื่อเขียนและปิดอีกครั้งจะไม่เพียงพอ อย่างน้อยข้อมูลบางส่วนจะยังคงอยู่ในอุปกรณ์จัดเก็บข้อมูลและสามารถพบได้ตัวอย่างเช่นโดยใช้ยูทิลิตี้การกู้คืนดิสก์
ตัวอย่างเช่นสมมติว่าไฟล์ที่คุณกำลังลบมีรหัสผ่านที่ใช้งานจริงและจำเป็นต้องลบทันทีหลังจากการดำเนินการปัจจุบันเสร็จสิ้น
การเติมไฟล์เป็นศูนย์เมื่อคุณใช้งานเสร็จแล้วจะช่วยให้มั่นใจได้ว่าข้อมูลที่ละเอียดอ่อนจะถูกทำลาย
ในโครงการล่าสุดเราใช้รหัสต่อไปนี้ซึ่งใช้ได้ดีกับไฟล์ข้อความขนาดเล็ก มันเขียนทับเนื้อหาที่มีอยู่ด้วยเส้นศูนย์
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)
โปรดทราบว่าการเติมศูนย์จะไม่รับประกันความปลอดภัยของคุณ หากคุณกังวลจริงๆคุณควรใส่ให้เป็นศูนย์และใช้ยูทิลิตี้เฉพาะทางเช่นFile ShredderหรือCCleanerเพื่อล้างพื้นที่ว่างในไดรฟ์ของคุณ
คุณไม่สามารถ "ลบ" ออกจากไฟล์ในตำแหน่งได้เว้นแต่คุณจะต้องลบส่วนท้าย ไม่ว่าจะเป็นเนื้อหาที่มีการเขียนทับค่า "ว่าง" หรืออ่านส่วนต่างๆของไฟล์ที่คุณสนใจและเขียนลงในไฟล์อื่น
เนื่องจากไฟล์ข้อความเป็นไฟล์ตามลำดับคุณจึงไม่สามารถลบข้อมูลในไฟล์ได้โดยตรง ตัวเลือกของคุณคือ:
ดูที่seek/ truncatefunction / method เพื่อนำแนวคิดข้างต้นไปใช้ ทั้ง Python และ C มีฟังก์ชันเหล่านั้น
os.removeหรือos.unlinkในหลามหรือunlinkใน C. truncateอีกตัวเลือกหนึ่งคือเพียงแค่เปิดไฟล์สำหรับการเขียนหรือการใช้งาน
การเขียนและอ่านเนื้อหาไฟล์
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
มันได้ผลสำหรับฉัน
คุณยังสามารถใช้สิ่งนี้ได้ (ตามคำตอบข้างต้นบางส่วน):
file = open('filename.txt', 'w')
file.write('')
file.close()
แน่นอนว่านี่เป็นวิธีที่แย่มากในการล้างไฟล์เนื่องจากต้องใช้โค้ดหลายบรรทัด แต่ฉันเพิ่งเขียนสิ่งนี้เพื่อแสดงให้คุณเห็นว่าสามารถทำได้ในวิธีนี้เช่นกัน
มีความสุขในการเขียนโค้ด!