2016-09-02 5 views
2

Допустим, у меня есть файл со следующим содержанием (каждый четный строка пуста):
Python - Подсчет пустых строк в текстовом файле

Линия 1

Линия 2

линия 3

. ..

Я попытался прочитать файл в 2-х направлениях:

count = 0 
for line in open("myfile.txt"): 
    if line == '':     #or if len(line) == 0 
    count += 1 

и

count = 0 
file = open('myfile.txt') 
lines = file.readlines() 
for line in lines: 
    if line == '':     #or if len(line) == 0 
    count += 1 

count Но всегда остается 0. Как я могу подсчитать количество пустых строк?

+8

Пустые линии по-прежнему содержат символ новой строки. 'strip()' будет удалять пустое пространство, включая строки новой строки. Используйте 'if not line.strip():' – khelwood

ответ

2

Когда вы используете функцию readlines(), она автоматически не удаляет символы EOL для вас. Таким образом, вы либо сравнить с конца строки, что-то вроде:

if line == os.linesep: 
    count += 1 

(вы должны импортировать os модуль, конечно), или вы удаляете строку (как это было предложено @ khelwood свой комментарий на ваш вопрос) и сравниваться '' как делаете.

Обратите внимание, что использование os.linesep может не работать так, как вы ожидали бы, если вы используете свою программу на определенной ОС, например. MacOS, но файл, который вы проверяете, находится в другой ОС, например. Linux, поскольку окончание строки будет другим. Поэтому, чтобы проверить все случаи, вам нужно сделать что-то вроде:

if line == '\n' or line == '\r' or line == '\r\n': 
    count += 1 

Надеюсь, это поможет.

3

В более простом и вещий образом:

with open(filename) as fd: 
    count = sum(1 for line in fd if len(line.strip()) == 0) 

Это держать линейную сложность по времени и постоянная сложность в памяти. И, самое главное, он избавляется от переменной count в качестве переменной с добавлением вручную.

1

Каждая строка заканчивается символом новой строки '\n'. Обратите внимание, что это только один символ.

простой обходной путь, чтобы проверить погоду линия равна '\n' или кастрированный баран его длине , а не 0.

+0

В текстовом файле, созданном в Windows, строка заканчивается символом '' \ r \ n'', а пустая строка имеет длину 2. Используйте 'strip', вот что это для. – Amadan

1

Вы можете использовать счет от itertools, который возвращает итератор. Кроме того, я использовал просто полоску вместо проверки длины.

from itertools import count 

counter = count() 

with open('myfile.txt', 'r') as f: 
    for line in f.readlines(): 
     if not line.strip(): 
      counter.next() 

print counter.next() 
+0

Добавление целых чисел не увеличивает использование памяти. – aluriak

+0

Я думаю, что это зависит от того, насколько великим будет целое число, не так ли? – turkus

+0

Да, но это не главное: 'itertools.count' использует как минимум столько же памяти, сколько и ручной счетчик. – aluriak