#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