Как сравнить значение со значением в CSV-файле?

1

У меня есть файл csv в формате:

text, class
text0,class0
text1,class1
..., ...

Импорт файла и размещение столбцов в списках:

textt=data['text']
classs=data['class']

Затем я запускаю скрипт, который классифицирует каждую часть текста на две категории.

for i in textt:
    #classify text
    text_class=#guessed_text_class

Я хочу сравнить text_class с классом каждой строки и сделать:

if text_class==class:
    print('correct')

edit: example: csv файл выглядит следующим образом:

text, class
'I hate Billy', 'Joe'
'I love Joe', 'Joe'
'I love Billy', 'Billy'

файл импортируется с помощью:

with open('csv_file', 'rU') as infile:
reader=csv.DictReader(infile)
data={}
for row in reader:
    for header, value in row.items():
        try:
            data[header].append(value)
        except KeyError:
            data[header]=[value]

textt = data ['Text'] classes = data ['Class']

каждое предложение в столбце "текст" классифицируется:

for i in textt:
    #classifies text
    text_class=#guessed text class

моя попытка найти, правильно ли text_class:

for i in range(len(textt))
    if i=text_class:
        print('correct')

Однако это заканчивает сравнение последнего элемента класса в списке, в данном случае "Билли", с элементами классов. Таким образом, это будет выглядеть так:

угаданные классы будут: "Джо", "Джо", "Билли",

но вместо сравнения:

'Joe'=='Joe'
'Joe'=='Joe'
'Billy'=='Billy'

он будет сравнивать:

'Billy'=='Joe'
'Billy'=='Joe'
'Billy'=='Billy'
  • 0
    Хорошее объяснение, но каков твой вопрос? Вы задаетесь вопросом о SyntaxError которую поднимает последняя часть? Было бы легче ответить, если бы вы предоставили минимальный, полный и проверяемый пример .
  • 0
    У меня вопрос, как мне перейти от 'text_class = # guessed_text_class' к 'if text_class == class: print ("correct") ". То, как я пытался это сделать, было после части 'for i in textt', написать еще один цикл for: 'для i в диапазоне (x): if text_class == class: print ("correct")', но это просто сравните его с text_class последнего элемента в textt
Показать ещё 3 комментария
Теги:

3 ответа

1
Лучший ответ

Это то, что вы хотите достичь?

for txt, cls in zip(textt, classs):
     if txt==cls: 
        print('correct')
  • 0
    да, но это ничего не печатало, и когда я добавил оператор else: print('wrong') , он напечатал все как неправильное
  • 0
    в конце концов это сработало, я неправильно понял, где я должен был начать цикл for. Спасибо
Показать ещё 1 комментарий
1

Если вы используете функцию enumerate вы можете проверить свой результат на той же самой итерации, предположив, что у вас одинаковый порядок в обоих списках.

for counter,i in enumerate(textt):
    #classify text
    text_class=#guessed_text_class
    if text_class == classs[counter]:
        print('correct')
  • 0
    Я получаю сообщение об ошибке: IndexError: string index out of range
  • 0
    Является ли textt списком или единственной строкой?
Показать ещё 1 комментарий
1

Предполагая, что списки имеют одинаковую длину и правильно упорядочены, вы можете просто запустить цикл от 0 до length-1 и сравнить свои классы.

for i in range(len(classs)):
    if text_class == classs[i]:
        print("yes")

В вашем случае я предполагаю, что вы захотите угадать класс и затем сравнить его в одном цикле. Таким образом, вы можете использовать приведенную ниже реализацию.

for i in range(len(classs)): # or len(textt). Since, I assume both would be same
    text_class = guess(textt[i])
    if text_class == classs[i]:
        print("yes")
  • 0
    Будет ли это все еще работать, если, когда я угадываю класс, я запускаю цикл for i in textt ? Как начать цикл для использования обоих списков?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню