Как считать пустые строки в python

#python #if-statement #is-empty

Вопрос:

Я читаю файл, содержащий пустые строки и слова, такие как «АВТОМОБИЛЬ» и «V3HICL3», например. Я хочу записать только правильные слова в другой файл. Для этого я хочу удалить пустые строки и слова с ошибками( здесь содержатся цифры). Я также хочу подсчитать, сколько строк было прочитано, удалено и принято. У меня возникли проблемы с захватом пустых строк. В моем списке у меня есть: автомобиль, v3hicl3, «пустой». Я не могу сосчитать пустые строки. Попробовал isspace и строку == «n». Похоже, это не работает. Как бы я посчитал эту последнюю пустую строку документа?

 import sys
def read():
    file_name = input("Name of the file to be read: ")
    try:
        file = open(file_name, 'r')
        lst = []
        line_num = 0
        accept_line = 0
        reject_line = 0
        empty_line = 0
        for line in file:
            line = line.strip() 
            if (len(line.strip()) == 0):
                line_num  = 1
            if (line == "n"):
                line_num  = 1
            if (len(line) != 0):
                line_num  = 1
            if (line.isalpha()):
                accept_line  = 1
                lst.append(line)
            else:
                reject_line  = 1
    print("Read", line_num, "lines")
    print("Rejected", reject_lines, "lines")
    except FileNotFoundError:
        print("open", file_name, "failure.")
        sys.exit(0)
    file.close()
    return lst, accept_line
 

Любой вклад приветствуется.

Комментарии:

1. if (line == "n"): никогда не будет правдой, потому line.strip() что удаляет новые строки.

2. Вам не нужно звонить strip() снова len(line.strip()) . Ты уже снял его.

3. Вы увеличиваете line_num , когда длина равна 0, а когда длина не равна 0. Вы хотели увеличить empty_line вместо line_num этого ?

4. @Бармар, верно, я виноват. Это было неосторожно. Я скопировал код, который вы указали ниже, в разделе «Ответы» есть 0 пустых строк. Я использовал тестовый файл всего с 2 словами и пустой строкой в конце. Это должно быть обнаружено, но это не так. Я думаю, что это должно быть 3 прочитанные строки, 1 принятая, 1 отклоненная, 1 пустая.

5. Я не думал, что ты захочешь считать пустые строки line_num . Если вы хотите сосчитать все строки, сделайте это за пределами любого из if блоков.

Ответ №1:

Вы увеличиваете line_num как пустые, так и непустые строки. Вы должны увеличивать empty_lines , когда len(line) == 0 .

Так line_num как следует посчитать все строки, увеличьте это за пределами любого из условий.

 import sys

def read():
    file_name = input("Name of the file to be read: ")
    try:
        with open(file_name, 'r') as file:
            lst = []
            line_num = 0
            accept_line = 0
            reject_line = 0
            empty_line = 0
            for line in file:
                line_num  = 1
                line = line.strip() 
                if (len(line) == 0):
                    empty_line  = 1
                elif (line.isalpha()):
                    accept_line  = 1
                    lst.append(line)
                else:
                    reject_line  = 1

        print("Read", line_num, "lines")
        print("Rejected", reject_lines, "lines")
        print("Empty", empty_line, "lines")
    except FileNotFoundError:
        print("open", file_name, "failure.")
        sys.exit(0)
    return lst, accept_line
 

Ответ №2:

Когда len(line.strip()) == 0 вам empty_line также нужно увеличить

Вы можете использовать это

  import sys
    def read():
        file_name = input("Name of the file to be read: ")
        try:
            file = open(file_name, 'r')
            lst = []
            line_num = 0
            accept_line = 0
            reject_line = 0
            empty_line = 0
            for line in file:
                line = line.strip() 
                if (len(line.strip()) == 0):
                    line_num  = 1
                    empty_line  = 1
                if (line == "n"):
                    line_num  = 1
                if (len(line) != 0):
                    line_num  = 1
                if (line.isalpha()):
                    accept_line  = 1
                    lst.append(line)
                else:
                    reject_line  = 1
            print("Read {} lines".format(line_num))
            print("Rejected {} lines".format(reject_line))
        except FileNotFoundError:
            print("open", file_name, "failure.")
            sys.exit(0)
        file.close()
        return lst, accept_line