Python, как получить данные твита, используя определенное слово в CSV-файле и поместить его в новый CSV-файл - PullRequest
0 голосов
/ 27 мая 2018

У меня есть твиттер данных в CSV-файле (который я использую с помощью Python API).Я получаю около 1000 строк данных.Теперь я хочу сократить данные твитов, используя конкретные индонезийские слова «macet» или «kecelakaan» (в английском языке «Traffic» или «ДТП»), и поместить соответствующие строки в новый отдельный файл CSV, как в Excel, используя * 1001.*.

Примером данных Twitter является example1.csv, а новый файл, который будет создан после поиска слова «macet» или «kecelakaan» - example2.csv.Но результата нет.

import re
import csv

with open('example1.csv', 'r') as csvFile:
    reader = csv.reader(csvFile)

if re.search(r'macet', reader):
    for row in reader:
        myData = list(row)
        print(row)

newFile = open('example2.csv', 'w')
with newFile:
    writer = csv.writer(newFile)
    writer.writerows(myData)

print("Writing complete")

Я использую spyder для среды Python 3.6.

Файл CSV уже находится в той же папке, что и Spyder.Вот снимок экрана с моими данными в твиттере CSV

myCSVtwitterData

обновлено: Пример файла CSV .Использование ОС: Windows

Ответы [ 3 ]

0 голосов
/ 27 мая 2018

Не отвечая о Python.Но если у вас ОС Linux, вы можете сделать это в одной командной строке:

grep -i "macet" exemple1.csv > exemple2.csv

-i для случая игнорирования, поэтому он также будет соответствовать "Macet"

0 голосов
/ 27 мая 2018

как это ~?этот код просматривает строки одну за другой и находит ячейки, содержащие слово в word_list, и записывает список значений в строку

import re
import csv

word_list = ['macet', 'kecelakaan']

with open('example1.csv', 'r') as csvFile, open('example2.csv', 'w') as newFile:

    reader = csv.reader(csvFile)
    writer = csv.writer(newFile, lineterminator='\n')

    for row in reader:
        new_row = [content for content in row if any(map(lambda word: word in content, word_list))]
        if(new_row != []):
            print(new_row)
            writer.writerow(new_row)

print("Writing complete")
0 голосов
/ 27 мая 2018

Есть пара проблем с вашим кодом.

В цикле чтения вы передаете объект csv.reader в re.search, но он не знает, как искать этот объект.Вам нужно передать ему текстовые или байтовые строки.

Строка

myData = list(row)

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

В любом случае, это исправленная версия вашего кода.На снимке экрана видно, что вы хотите искать только текст в столбце 2 входных данных (что соответствует столбцу C в вашей электронной таблице).Я создал регулярное выражение, которое ищет целые слова "macet" и "kecelakaan", совпадения "\ b" на границах слов, поэтому мы не получим совпадение, если "macet" или "kecelakaan" является частью большегоword.

import re
import csv

# Make a case-insensitive regex to match the words "macet" or "kecelakaan"
pattern = re.compile(r'\bmacet\b|\bkecelakaan\b', re.I)

with open('example1.csv', 'r', newline='') as csvFile, open('example2.csv', 'w', newline='') as newFile:
    reader = csv.reader(csvFile)
    writer = csv.writer(newFile)

    for row in reader:
        # Skip empty rows
        if not row:
            continue
        if pattern.search(row[2]):
            print(row)
            writer.writerow(row)

print("Writing complete")

Я только что сделал пару улучшений в этом коде.Теперь он использует аргумент newline='' для открытия файлов CSV и пропускает все пустые строки во входном CSV.И регулярное выражение теперь игнорирует регистр при поиске подходящих слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...