2015-03-20 6 views
0

У меня есть файл CSV с 2 столбцами (A, B). Я читаю его по строкам и сравнивая строку в столбце A со строкой в ​​столбце B. Мой код выводит 0.0 или 1.0, но не так, как я ожидаю. Моя догадка заключается в том, что a=line[0] и b=line[1] в SequenceMatcher не являются строковыми литералами, а являются переменными.Python 3.4 difflib SequenceMatcher ratio Сравнение строк Вывод 0.0 или 1.0 Только

import difflib 

with open('compare_column_A_to_column_B.csv', 'r') as f: 
    lines = [line.strip() for line in f] 
    for line in lines: 
    seq = difflib.SequenceMatcher(None, a=line[0], b=line[1]).ratio() 
    print(seq) 

Почему не выставляется соотношение?

ответ

1

Когда вы читаете строки от f вот так, вы читаете строки. Таким образом, строка [0] и строка [1] являются только первым и вторым символами каждой строки. Два символа могут быть равными или не равными - поэтому вы получаете только 0.0 и 1.0.

Чтобы сделать то, что вы сделали, используйте csv пакет из стандартной библиотеки Python.

import difflib 
import csv 

with open('compare_column_A_to_column_B.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     ratio = difflib.SequenceMatcher(None, a=row[0], b=row[1]).ratio() 
     print(ratio) 
+0

Благодарим за версию модуля CSV. Ваш совет только о сравнении персонажей был моим моментом «до». Сначала мне нужно было разделить линию на две части. – Jarad

0

Я забыл добавить line.split(","). Я отправляю свое решение ниже, если кто-то заинтересован.

import difflib 

with open('compare_column_A_to_column_B.csv', 'r') as f: 
    header_line = next(f).strip() 
    print(header_line) 
    lines = [line.strip() for line in f] 
    for line in lines: 
    line = line.split(",") 
    seq = difflib.SequenceMatcher(None, a=line[0], b=line[1]).ratio() 
    print(seq) 

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

  • Нет связанных вопросов^_^