Удалить строку, если значение в столбце соответствует значению в отдельном списке - PullRequest
0 голосов
/ 14 мая 2019

У меня есть один файл, подобный этому:

george@mail.com|george|Sutherland|Manchester|England
marcel@email.com|Marcel|ZIDANE|Marseille|France
some@gmail.com|Simon|surname|Somewhere|Else

И список писем:

ty230923@hotmail.com
marcel@email.com
email@anothermail.com

Я хотел бы удалить все строки из файла 1, которые содержат письмо вПервый столбец найден в файле 2. Ожидаемый результат будет следующим:

george@mail.com|george|Sutherland|Manchester|England
some@gmail.com|Simon|surname|Somewhere|Else

Мне нужно решение, которое будет работать в больших масштабах (100 000 000 строк).Попробовал решение grep, но после нескольких часов бега результата все равно не было.Нам сообщили, что AWK может быть подходящим вариантом.

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 14 мая 2019

В Python вы можете использовать библиотеку pandas с функцией слияния, чтобы получить то, что вы хотите. У вас не должно быть проблем с масштабированием с помощью панд.

Вот как бы вы решили проблему:

import pandas

In [1] : df = pd.DataFrame({'e-mail': ['a@hotmail.fr', 'b@hotmail.fr', 'c@hotmail.fr'], "Name": ['Bob', 'Alice', 'Britney']})
Out[1] :
Name    e-mail
0   Bob a@hotmail.fr
1   Alice   b@hotmail.fr
2   Britney c@hotmail.fr

In [2] : df2 = pd.DataFrame({'e-mail' : ['a@hotmail.fr', 'd@hotmail.fr']})
Out[2] :
e-mail
0   a@hotmail.fr
1   d@hotmail.fr

In [3] : df_ final = df.merge(df2, indicator='i', how='outer').query('i == "left_only"').drop('i', 1)

In [4]: df_final.head()
Out[4]: 
Name    e-mail
1   Alice   b@hotmail.fr
2   Britney c@hotmail.fr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...