Tôi có tệp CSV users.csvcó danh sách tên người dùng, tên người dùng và dữ liệu khác:
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"
Trong một tệp khác toremove.txttôi có một danh sách các userID:
30923833
77392318
Có cách nào thông minh, hiệu quả để xóa tất cả các hàng khỏi users.csvtệp có chứa ID toremove.txtkhông? Tôi đã viết một ứng dụng Python đơn giản để phân tích hai tệp và ghi vào một tệp mới chỉ những dòng không được tìm thấy toremove.txt, nhưng nó rất chậm. Có lẽ một số sedhoặc awkphép thuật có thể giúp đỡ ở đây?
Đây là kết quả mong muốn, xem xét các ví dụ trên:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
users.csvdòng của tệp và n cho các dòng của toremove.txt. Tôi không thực sự chắc chắn làm thế nào để làm điều đó với độ phức tạp thấp hơn. Ý chính của nó là : for u in users: if not any(toremove in u): outputfile.write(u). Tôi có thể đăng nó lên Code Review.
toremove.txt, lưu các mục làm chìa khóa . Lặp lại users.csv, in những nơi mà id không có trong dict. Bạn nhận được xử lý O (n) cho cả toremove.txtvà và users.csvsử dụng bộ nhớ O (n) cho toremove.txt(có lẽ tương đối nhỏ)