मेरे पास 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
मेरे पास userIDs की एक सूची है:
30923833
77392318
क्या users.csv
फ़ाइल से सभी पंक्तियों को निकालने का एक चतुर, कुशल तरीका है जिसमें आईडी शामिल हैं toremove.txt
? मैंने दो फ़ाइलों को पार्स करने के लिए एक साधारण पायथन ऐप लिखा है और एक नई फ़ाइल में केवल उन पंक्तियों को लिखा है जो इसमें नहीं पाई जाती हैं 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)
:। मैं इसे कोड समीक्षा में पोस्ट कर सकता हूं।
toremove.txt
, प्रविष्टियों को कुंजियों के रूप में सहेजना । Iterate users.csv, उन लोगों को प्रिंट करना जहां आईडी तानाशाह में नहीं है। आप दोनों के लिए मिलता हे (एन) के प्रसंस्करण toremove.txt
और users.csv
, और के लिए हे (एन) स्मृति उपयोग toremove.txt
(जो शायद अपेक्षाकृत छोटा है)