удалить идентификаторы в списке, если идентификаторы не в другом списке

Я совершенно новичок в программировании. Что я пытаюсь сделать: у меня есть csv-файл с идентификаторами в третьей строке и textfile с собранными идентификаторами из Tweepy. Теперь я хочу удалить все идентификаторы в textfile, которые не находятся в списке csv.
Я создал такой код:

#file with the IDs I am looking at
with open("twitter_ids.csv","r") as input:
#file with gathered IDs
with open("all.txt","rw") as output: 

if id in output & input:
    keep_ids=[]
if id not in output & input:
    delete_ids=[]

2 ответа

  1. Я предполагаю, что ваш csv настроен примерно так

    unimportant,text,12345
    more,text,98765
    

    Где номера являются идентификаторами. Я предполагаю, что ваш txt-файл имеет идентификатор oen в каждой строке

     12345
     98765
    

    Сначала мы прочитаем все идентификаторы из csv-файла в набор

    import csv
    
    id_set = set()
    with open('filename.csv', newline='') as file1:
        r = csv.reader(file1)
        for l in r:
            id_set.add(l[2].strip())
    

    Затем мы пройдем через txt-файл и вытащим идентификаторы, которые находятся id_setв списке

    with open('filename.txt', 'r') as file2:
        confirmed = []
        for l in file2:
            l = l.strip()
            if l in id_set:
                confirmed.append(l)
    with open('filename.txt', 'w') as file2:
        file2.write('\n'.join(confirmed))
    
  2. Say you have a listof Twitter IDs:

    twitter_ids = ['aaa', 'bbb', 'ccc', 'ddd', 'abc', 'zzz']
    

    И alist» всех » идентификаторов:

    all_ids = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh']
    

    Это просто пример, но в зависимости от того, сколько элементов у вас есть в каждом из этих списков, вы можете преобразовать их в sets для более быстрого поиска членства.

    В любом случае, есть ли у вас setилиlist, вы можете получить идентификаторы только в twitter_idsэтом:

    only_twitter = [id_ for id_ in twitter_ids if id_ not in all_ids]
    

    Это » понимание списка «в основном говорит:» Дайте мне каждый элемент, twitter_idsкоторый не является элементомall_ids. Итак, храните в only_twitterTwitter идентификаторы, уникальные для twitter_idsсписка.

    Примечание: setобъекты в Python действительно хорошо справляются с этим типом проблемы:

    twitter_ids = set(['aaa', 'bbb', 'ccc', 'ddd', 'abc', 'zzz'])
    all_ids = set(['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh'])
    
    # take the difference between the two sets
    only_twitter = twitter_ids - all_ids
    
    print(only_twitter)
    

    only_twitter содержать это:

    {'zzz', 'abc'}
    

    который является тем же результатом, что и выше, элементарно, просто хранится в разностной структуре данных.