ฉันมีไฟล์ CSV users.csv
พร้อมรายชื่อผู้ใช้ชื่อผู้ใช้และข้อมูลอื่น ๆ :
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"Paul McCartny", 30923833, "left", "black"
"Ringo Starr", 77392318, "right", "blue"
"George Harrison", 72349482, "left", "green"
ในไฟล์อื่นtoremove.txt
ฉันมีรายการหมายเลขผู้ใช้:
30923833
77392318
มีวิธีที่ฉลาดและมีประสิทธิภาพในการลบแถวทั้งหมดออกจากusers.csv
ไฟล์ที่มีรหัสtoremove.txt
หรือไม่ ฉันได้เขียนแอพ Python อย่างง่ายเพื่อแยกไฟล์สองไฟล์และเขียนลงในไฟล์ใหม่เฉพาะบรรทัดที่ไม่พบtoremove.txt
แต่มันช้ามากเป็นพิเศษ บางทีเวทมนตร์sed
หรือบางอย่างawk
อาจช่วยได้ที่นี่
นี่คือผลลัพธ์ที่ต้องการโดยพิจารณาจากตัวอย่างด้านบน:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csv
บรรทัดของไฟล์และ n toremove.txt
สำหรับสายของ ฉันไม่แน่ใจจริงๆว่าจะทำอย่างไรกับความซับซ้อนที่ลดลง for u in users: if not any(toremove in u): outputfile.write(u)
สรุปสาระสำคัญของมันคือ ฉันสามารถโพสต์ไว้ที่ Code Review
toremove.txt
ประหยัดรายการเป็นคีย์ ทำซ้ำ users.csv พิมพ์ที่ id ไม่อยู่ใน dict คุณได้รับการประมวลผล O (n) สำหรับทั้งtoremove.txt
และusers.csv
และการใช้หน่วยความจำ O (n) สำหรับtoremove.txt
(ซึ่งอาจจะค่อนข้างเล็ก)