Удаление пустых строк из текстового файла (не списков) в Python 3

#python #editor

#python #редактор

Вопрос:

Пример текста 1 — это вывод выдержки из некоторого текста, который я пытаюсь отформатировать (не позволил бы мне вставить его непосредственно в исходный формат или прикрепить img). Вывод генерируется из следующего:

 fhandle = open('legalcode.txt')
for line in fhandle:
    line = line.strip()
    print(repr(line))

hold = input()
 

Строка 2 моего вывода просто пуста, и похоже, что я тоже получаю пустые строки? Я ищу разъяснения относительно того, что это за пустое пространство в строке 2, и рекомендации по удалению пустых строк. Все текущие результаты поиска обсуждают только удаление строк из списков.

Заранее благодарю вас за помощь.

РЕДАКТИРОВАТЬ 1

Я использовал следующее, чтобы удалить ‘ ‘, как обсуждалось:

 fhandle = open('legalcode.txt')
for line in fhandle:
    line = line.strip()
    line = line.strip('r')
    if line == '':
        continue
    print(repr(line))
 

Но, как вы можете видеть в примере текста 2, в предпоследней строке все еще есть неопознанный пробел. Существует ли альтернативный метод отображения скрытых символов?

РЕДАКТИРОВАТЬ 2

Текстовый файл, с которым я работаю: https://github.com/Achulhu/Legal-Code-Reformat

Исходный текст можно найти по адресу: https://www.ilga.gov/legislation/ilcs/ilcs5.asp?ActID=3992amp;ChapterID=35

РЕДАКТИРОВАТЬ 3

Я интегрировал рекомендацию @Arseniy для [ord] с текущим прогоном:

 fhandle = open('legalcode.txt','r')
for line in fhandle:
    line = line.strip()
    line = line.strip('r')
    if line == '':
        continue
    print(repr(line),[ord(c) for c in line])
 

Однако [ord] не присваивает этому пространству идентификатор (пример текста 3). Для пояснения я использую ОС Windows и вызываю ее из командной строки. Он был написан на ATOM, и я также попытался запустить его через IDLE, чтобы посмотреть, помогло ли это.

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

1. Кавычки там, потому что вы использовали repr() , который специально заключает строки в кавычки. Почему вы используете repr() , если вы не хотите такого поведения?

2. Repr() используется только для того, чтобы показать мне, что там есть. Эти пробелы существуют независимо.

3. В этих случаях line это пустая строка, потому что в файле была пустая строка. Вы хотите удалить пустые строки из фактического файла или просто пропустить их печать в цикле?

4. В конце концов, я их удалю, но сейчас я просто пытаюсь понять разницу между строкой 2 и строкой 4 моего вывода. Я добавил: *** если строка == ‘ ‘: продолжить *** и это решает строку 4, однако это не решает строку 2 образца текста. 🙁

5. Первая строка выглядит так, как будто она обрезана — она заканчивается двойной кавычкой, но не начинается с единицы. Также во второй строке вообще нет кавычек, что не согласуется с repr() . Вы уверены, что скриншот точен?

Ответ №1:

Просто :

 fhandle = open('legalcode.txt')
for line in fhandle:
    line = line.replace('n', '').replace('r', '')
    line = line.strip()
    print(repr(line))

hold = input()
 

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

1. Да, я только что добавил ссылку на GitHub к исходному сообщению. Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы с доступом, поскольку я никогда раньше не использовал GH.

Ответ №2:

Попробуйте это 🙂

 fhandle = open('legalcode.txt')
for line in fhandle:
    if not line.strip():
        continue
    print(line.strip())
 

Или

 fhandle = open('legalcode.txt')
lines=[l.strip() for l in fhandle.readlines() if l.strip()]

for l in lines: 
   print(l)
 

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

1. Все еще получаю пустые строки с этим. 🙁

2. Попробовал ваш 2-й вариант также после редактирования, проблема остается.

3. Хм. Я проверил этот код на вашем примере) Я думаю, что на вашей платформе (например, windows?) Некоторые символы не были удалены методом strip. давайте проверим это с помощью этого кода « fhandle = open(‘legalcode.txt ‘) для строки в fhandle: если line.strip(): продолжить печать([ord(c) для c в строке]) « Этот код выведет целое число, представляющее оставшиеся символы.

4. Я только что обновил исходное сообщение с вашей рекомендацией. Я запустил ваш код [ord] сам по себе, и он вернулся без пробелов, но при совместном запуске он по-прежнему показывает пробелы, но без привязки к пробелу…