【发布时间】:2012-06-05 21:31:33
【问题描述】:
我刚刚完成了一个(叹气)终于可以工作的脚本。它在 Twitter 上搜索关键字。将结果写入 csv 中,其中包含 4 列关键字、Tweet、Lat、Lon(位置)。我正在使用的代码是:
import tweepy
import csv
keywordList = ['McDonalds', 'Taco Bell', 'Burger King',]
for keyword in keywordList:
result = tweepy.api.search(q=keyword,rpp=1000,page=2, geocode= "34.085422,-117.900879,500mi" )
with open(r'C:\Temp\results.csv', 'a') as acsv:
w = csv.writer(acsv)
for tweet in result:
lat, lon = tweet.geo if tweet.geo else ('', '')
try:
a = tweet.geo['coordinates']
print a[0] , a[1]
print tweet.text
w.writerow((keyword, tweet.text, a[0] , a[1]))
except:
pass
我想使用任务管理器或 python 每 5 分钟运行一次此搜索,但它会重写重复项。我打算使用以下代码删除重复项,但发生了两件事。 resutls2.csv 是空白的,当我打开 csv 时,它被锁定,我必须以只读方式查看它。我尝试了 f1.close()、writer.close() 等,但它说“csv.reader”对象没有关闭属性。
我最担心的是通过写入新的 csv 或在每次搜索时以某种方式删除并写入同一个表来避免重复。任何建议都非常感谢!
import csv
f1 = csv.reader(open(r'C:\Temp\results.csv', 'rb'))
writer = csv.writer(open(r'C:\Temp\results2.csv', 'wb'))
tweet = set()
for row in f1:
if row[1] not in tweet:
writer.writerow(row)
tweet.add( row[1] )
f1.close()
writer.close()
【问题讨论】:
-
使用数据库并声明对您想要不同的列组合的唯一约束...如果您不想运行数据库,只需使用 sqlite。
-
也许比 Endophage 的建议更笼统:为什么不扩展脚本以读取先前生成的
.csv文件并仅在它们不存在时才添加条目? -
@user946850 这就是我想做的。我在上面做了这个脚本来测试它是否首先工作。然后我打算将它添加到原始脚本中。
-
这个问题:stackoverflow.com/questions/3216954/python-no-csv-close 涉及关闭 CSV 读取器和写入器。除了每个关键字只允许一条推文外,您的代码看起来是正确的。不确定这是否符合您的要求。
-
@user946850 不,它会为每个关键字返回多条推文,但仅在存在地理位置时才返回。不知道为什么我在运行新代码时得到一个空白的 csv