У мене є файл 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, зберігаючи записи як ключі . Iterate users.csv, друкуючи ті, де ідентифікатор не вказаний. Ви отримуєте обробку O (n) і для toremove.txtі users.csv, і для O (n) використання пам'яті toremove.txt(що, мабуть, порівняно мало)