我对编程完全陌生。我想要做的是:我在第三行有一个带有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=[]
答案 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'}
与上面的结果相同,元素方面,只存储在差异数据结构中。