在Python中删除具有特定条件的行

时间:2015-02-23 14:17:44

标签: python csv twitter

我正在使用Twitter的Twitter搜索API对某些关键字的Twitter消息进行研究。

现在我有一个大型CSV文件,包含包含此关键字的消息,但也包含用户名中的关键字。因此,这些消息与关键字无关,关键字恰好位于用户名中。

示例:

  • 我的csv中的一个正确的行: @Koningsbruggen发推文:@CGCommunicatie你们是" KEYWORD"?

  • 我的csv中的行不正确: @" KEYWORD" _lady推特:@rvanbommel是的,没关系

如何使用Python代码删除后一行? 我有一个120K行的csv,所以自动删除这些不正确的行会很好。

2 个答案:

答案 0 :(得分:1)

如果您的输入文件是消息的逐行列表:

ATamsterdam_lady tweeted: ATrvanbommel ja dikke vlokken
ATKoningsbruggen tweeted: ATCGCommunicatie zitten jullie in Amsterdam?
ATJustoRasta tweeted: febovers ... AT Leidseplein - Amsterdam Centrum t.co/KCUCzj2dWq
AT7Ash_bash tweeted: #HENNY AND AMSTERDAM TONIGHT

然后你可以使用以下Python代码:

input_file = 'twitter.txt'
output_file = 'result.txt'
keyword = 'Amsterdam'

with open(input_file) as f:
    lines = f.readlines()

for line in lines:
    message = line.split('tweeted: ')[1]
    if keyword.lower() in message.lower():
        with open(output_file, 'a') as myfile:
            myfile.write(line)

生成的输出文件包含逐行文本,仅在“消息”部分包含“阿姆斯特丹”:

ATKoningsbruggen tweeted: ATCGCommunicatie zitten jullie in Amsterdam?
ATJustoRasta tweeted: febovers ... AT Leidseplein - Amsterdam Centrum t.co/KCUCzj2dWq
AT7Ash_bash tweeted: #HENNY AND AMSTERDAM TONIGHT

答案 1 :(得分:0)

如果您将推文加载到pandas数据框中,那么可以非常轻松快速地过滤:

In [11]:

df = pd.DataFrame({'tweet':['@Koningsbruggen tweeted: @CGCommunicatie are you guys in "KEYWORD"?', '@"KEYWORD"_lady tweeted: @rvanbommel yes thats okay']})
df
Out[11]:
                                               tweet
0  @Koningsbruggen tweeted: @CGCommunicatie are y...
1  @"KEYWORD"_lady tweeted: @rvanbommel yes thats...

我们可以将向量化的str方法调用split推文,并使用contains过滤它们:

In [25]:

df[df.tweet.str.split('tweeted:').str[1].str.contains('KEYWORD')]
Out[25]:
                                               tweet
0  @Koningsbruggen tweeted: @CGCommunicatie are y...

有许多方法可以将数据加载到pandas中:http://pandas.pydata.org/pandas-docs/stable/io.html