2015-02-23 2 views
0

Я занимаюсь исследованием определенного ключевого слова сообщений Twitter, используя API-интерфейс Twitter для Python.Удалить строки с определенными условиями в Python

Теперь у меня большой CSV-файл, состоящий из сообщений, содержащих это ключевое слово, а также с ключевым словом в имени пользователя. Таким образом, эти сообщения не касаются ключевого слова, ключевое слово просто находится в имени пользователя.

Пример:

  • corrrect строки в моем CSV: @Koningsbruggen твиттере: @CGCommunicatie вы, ребята в "KEYWORD"?

  • Неправильная строка в моей CSV: @ _lady "KEYWORD" твиттере: @rvanbommel да это нормально

Как я могу удалить последнюю строку, используя код Python? У меня есть csv с 120K строк, поэтому было бы неплохо автоматически удалить эти неправильные строки.

+0

* Как удалить последнюю строку с помощью кода Python? * Да, вы можете. Попробуйте написать сценарий, который считывает данные, и когда вы застряли в рядах фильтров, возвращайтесь с новым вопросом. –

+0

[Открыть файл и перебрать его] (https://docs.python.org/2.7/tutorial/inputoutput.html#reading-and-writing-files), ['' 'split'''] (https: //docs.python.org/2.7/library/stdtypes.html#str.split) каждая строка в двоеточие ('' ':' ''), ['' 'if'''] (https: // docs .python.org/2.7/tutorial/controlflow.html # if-statements) строка соответствует вашим критериям, [сохраните ее в списке] (https://docs.python.org/2.7/tutorial/introduction.html#lists) – wwii

ответ

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) 

Сгенерированных выходной файл содержит строку по тексту строки с включенным «Амстердамом» только в " message ':

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

мой вход - это csv, который выглядит так: ATamsterdam_lady в твиттере: ATrvanbommel ja dikke vlokken ATKoningsbruggen в твиттере: ATCGCommunicatie zitten jullie в Амстердаме? ATJustoRasta в твиттере: febovers ... AT Leidseplein - Amsterdam Centrum http://t.co/KCUCzj2dWq AT7Ash_bash в твиттере: #HENNY AND AMSTERDAM TONIGHT! Так что всего лишь 1 сообщение Twitter в каждой строке. – mvh

+0

@mvh, я обновил сценарий в соответствии с вашими комментариями. Сейчас нужно работать. – Alderven

+0

Мой файл по файлу по умолчанию, как вы сказали, но без; в конце каждой строки.Кроме того, я также хотел бы получить свой вывод за строкой. Мне просто нужно изменить: writer = csv.writer (csv_file, delimiter = '\ n') Итак, разделитель? Спасибо – mvh

0

Если вы загрузили ваши твиты в панд dataframe, то это может быть отфильтрован очень легко и быстро:

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

мы можем назвать vectorised 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... 

Есть много методов для загрузки данных в панд: http://pandas.pydata.org/pandas-docs/stable/io.html

Смежные вопросы