如果ID不在其他列表中,则删除列表中的ID

时间:2016-12-30 14:21:09

标签: python csv

我对编程完全陌生。我想要做的是:我在第三行有一个带有ID的csv文件和一个带有来自Tweepy的ID的文本文件。现在我要删除文本文件中不在csv列表中的所有ID。 我创建了一些像这样的代码:

#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 个答案:

答案 0 :(得分:0)

我假设您的csv设置类似这样的

unimportant,text,12345
more,text,98765

数字是ids。我假设你的txt文件在每一行都有id

 12345
 98765

首先我们将csv文件中的所有ID读入集合

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中的ID拉入列表

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))

答案 1 :(得分:0)

假设您有list Twitter ID:

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

list" all"标识:

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

这只是一个示例,但根据您在每个列表中的元素数量,您可能希望将它们转换为set以便更快地进行成员资格查找。

无论如何,无论您是set还是list,都只能在twitter_ids中获取ID:

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

这个"列表理解"基本上说"给我twitter_ids中不是all_ids中的元素的每个元素。因此,在only_twitter中存储twitter_ids列表唯一的Twitter ID。

注意:Python中的set个对象非常适合这类问题:

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'}

与上面的结果相同,元素方面,只存储在差异数据结构中。