Используйте встроенную функцию open()
вместо codecs.open()
.
Вы столкнулись с разницей между строковыми типами не-Unicode (Python 3 bytes
, Python 2 str
) и Unicode (Python 3 str
, Python 2 unicode
). Python 3 не будет автоматически конвертировать между не-Unicode и Unicode, как это делает Python 2. Использование codecs.open () без параметра encoding
возвращает объект, который выдает bytes
при чтении из него.
Кроме того, ваша countLOC
функция не будет работать:
for letter in range(comment):
if not letter.whitespace:
LOC += 1
break
То, что цикл for будет перебирать числа от нуля до единицы меньше, чем позиция '#'
в строке (letter = 0, 1, 2...
); whitespace
не является методом целых чисел, и даже если бы он был, вы не вызываете его.
Кроме того, вы никогда не увеличиваете LOC, если строка не содержит #
.
«исправленная», но в остальном верная (и неэффективная) версия вашей countLOC
:
def countLOC(inFile):
LOC = 0
for line in inFile:
if line.isspace():
continue
comment = line.find('#')
if comment > 0:
for letter in line[:comment]:
if not letter.isspace():
LOC += 1
break
else:
LOC += 1
return LOC
Как я мог бы написать функцию:
def count_LOC(in_file):
loc = 0
for line in in_file:
line = line.lstrip()
if len(line) > 0 and not line.startswith('#'):
loc += 1
return loc