Условная проверка строк, не дающих ожидаемого поведения - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть база данных SQLite, в которую я читаю данные с использованием Python. Я подключаюсь к базе данных, а затем сохраняю весь столбец комментариев в список с именем output. Каждая запись в списке является строкой, я хочу выделить записи в списке, которые содержат только строку «[удалено]».

Для этого я использую цикл для индексации в списке, а затем для каждой точки сравниваю строку с индексом i со строкой «[удалено]», если строка «[удалено]», она должна установить соответствующее значение 1 по индексу i в векторе нулей называется удаленным флагом. Код, который я использую ниже:

deletedFlag = np.zeros((len(output),1))
for i in range(0,len(output)):
        if (output[i] == "[deleted]"):
            deletedFlag[i] = 1

Проблема в том, что output [i] == '[удалено]' никогда не возвращает true и поэтому никогда не устанавливает соответствующий удаленный флаг [i] = 1

Дальнейшее расследование и распечатка вывода [i] на консоль для значения i, которое, как я знаю, содержит строку [удалено], возвращает строку, немного отличающуюся от ожидаемой:

>> print(output[3])
>> ('[deleted]',)

Однако даже если я изменю свое сравнение строк так, чтобы оно совпадало с напечатанным значением, я все равно получу такое же поведение вектора удаленного флага, оставшегося во всех нулях:

deletedFlag = np.zeros((len(output),1))
for i in range(0,len(output)):
        if (output[i] == "('[deleted]',)"):
            deletedFlag[i] = 1

При просмотре первых четырех записей базы данных с использованием DB Browser показано следующее, взятое со скриншота, и это строка 4 колонки комментариев, которую я пытаюсь определить:

enter image description here

Я предполагаю, что я просто неправильно сравниваю строки, но я не могу понять, как это должно быть, и я попробовал большинство перестановок скобок и кавычек, которые только можно себе представить. Я понимаю, что это, вероятно, действительно основная проблема, но любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 30 апреля 2018

Ну ... это напечатано output[3] вроде как наполовину заполненный кортеж. поэтому, возможно, вам придется проверить output[i][0].

Кроме того, я бы предложил использовать __contains для сравнения строк, и вам не нужно писать range(0,n): по умолчанию он начинается с нуля, поэтому простой range(n) делает то же самое;>

deletedFlag = np.zeros((len(output),1))
for i in range(len(output)):
    if output[i][0].__contains("deleted"):
        deletedFlag[i] = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...