Я наткнулся на проблему при сравнении строк в файлах CSV.Python - игнорировать пустые ячейки в len() с csv.DictReader
Я мог бы использовать csv.reader с len(), и он работает нормально, но я тогда должен сортировать файл по ключу.
У меня есть уникальные ключи, так что я хочу использовать DictReader но Len(), кажется, читает все значения в Словаре, включая пустые ячейки:
with open (baseline, 'r') as baselineF:
readBaseline=csv.DictReader(baselineF, delimiter=',', quotechar='"')
for rowb in readBaseline:
print('rowb: ',len(rowb))
with open (tested, 'r') as testedF:
readTested=csv.DictReader(testedF, delimiter=',', quotechar='"')
for rowt in readTested:
print ('rowt: ', len(rowt))
# Rows are the same len
if len(rowb)==len(rowt):
writerSameOracle.writerow(rowb)
writerSameHPCC.writerow(rowt)
print ('Rows are the same')
break
С помощью этого кода, даже если строки имеют одинаковое количество заселенных клеток это похоже, возвращает len() = количество заголовков в каждом файле.
Ни один из них работал:. ** 1 ** LEN (фильтр (BOOL, rowb) печать ('\ nrowb:', длина (фильтр (BOOL, rowb))) TypeError: объект типа 'filter' не имеет len() ** 2. ** print ('\ nrowb:', len ([x for x in rowb if x! = None])) всегда будет производить lan = до числа ключи/заголовки @ 2rs2ts – Vic152
Чрезвычайно сложно прочитать ваш код в комментарии, либо напишите его так, чтобы программа могла быть прочитана в одной строке, либо отредактировала свой вопрос, чтобы включить в себя, как вы изменили код на основе моего ответа. , обе эти работы, поэтому вы делаете что-то неправильно. Возможно, вы затенены «фильтр». Возможно, вы не хотели использовать 'x! = None', а скорее правду' x', как я рекомендовал. Возможно, вы не используете длину отфильтрованного списка правильно. Вы должны предоставить пример ввода и ожидаемый результат (по сравнению с фактическим выходом.) – 2rs2ts
А, мои извинения, я забыл, что 'filter()' имеет свой собственный тип возвращаемого значения теперь в Python 3. Я все еще использую Python 2. Позвольте мне настроить мой ответ. – 2rs2ts