python: як перевірити, чи є рядок порожнім


86

Спроба з’ясувати, як написати цикл if, щоб перевірити, чи рядок порожній.

У файлі багато рядків, і один із них - це порожній рядок, який відокремлюється від інших тверджень (а не ""; це повернення каретки, за яким слідує інше повернення каретки)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Оскільки я використовую модуль введення файлів, чи є спосіб перевірити, чи рядок порожній?

Використовуючи цей код, здається, це працює, дякую всім!

for line in x:

    if line == '\n':
        print "found an end of line"

x.close()

Відповіді:


128

Якщо ви хочете ігнорувати рядки з лише пробілами:

if not line.strip():
    ... do something

Порожній рядок - значення False.

Або якщо ви дійсно хочете лише порожні рядки:

if line in ['\n', '\r\n']:
    ... do  something

другий робить те, що я мав на увазі, дякую! якщо рядок у ['\ n']:
user1006198

1
Якщо ви лише використовуєте if line in ['\n'], вам слід замінити це на if line == '\n'.
Ендрю Кларк,

7
Я хотів би зазначити, що прийнята відповідь має помилку: якщо line.strip (): ... # щось ігнорує рядки з пробілами, тобто пробіл, вкладка та порожній рядок. Ось чому для оригінального плаката працював лише другий: “не” потрібно видалити.
niefpaarschoenen

3
якщо не line.strip (): ... зробити щось. Чи не слід натомість продовжувати? тому що якщо не line.strip () насправді означає, що рядок порожній, тож із нього нічого не можна вилучити, отже ігнорувати або продовжувати. Перша частина не line.strip () ловить усі порожні рядки
Dhiwakar Ravikumar

1
Чи було б чистіше використовувати os.linesepзамість ['\n', '\r\n']?
Шон

24

Я використовую наступний код для тестування порожнього рядка з пробілами або без них.

if len(line.strip()) == 0 :
    # do something with empty line

11
line.strip() == ''

Або, якщо ви не хочете "з'їдати" рядки, що складаються з пробілів:

line in ('\n', '\r\n')

1
У другому зразку ви, мабуть, також хотіли б перевірити, \r\nчи враховуються закінчення рядків у стилі Windows (CRLF)
poplitea

забув згадати, що це працює на машині Unix, тому він використовує новий рядок без \ r. Ти спробував, але це не спрацювало, що працює для мене: якщо рядок у ['\ n']: (немає поняття, чому рядок == "\ n" не буде працювати)
user1006198

1
@ user1006198: якщо ви лише перевіряєте наявність \n, то line == '\n'це краще. Ймовірно, слід спробувати ще раз і з’ясувати, в чому була ваша проблема.
повторити

@ user1006198: (1) Читання створеного Windows текстового файлу в Unix дасть вам, \r\nякщо ви не використовуєте mode='rU'(2) Отримайте підказку: print repr(line)а якщо це не дає підказки, скажіть нам, що саме "не працює" означає для вас.
John Machin

Єдине пояснення, яке я маю, полягає в тому, що, мабуть, вхідний файл робить щось для кожного рядка, тому що, коли я роблю порівняння рядка з ==, я не потрапляю в оператор (друк рядка, щоб побачити, чи не вдарив я порожній рядок , а з == він ніколи не друкує рядок для налагодження, тоді як він робить це, коли я використовую "якщо рядок у").
user1006198

2

Вам слід відкривати текстові файли, використовуючи rUтак, щоб нові рядки були належним чином перетворені, див. Http://docs.python.org/library/functions.html#open . Таким чином немає необхідності перевіряти наявність \r\n.


спробував відкрити, але я вважаю, що введення файлів більше підходить для мого випадку
user1006198

5
Слід також зазначити, що Uаргумент не підтримується в python3.
jtwilson

1

Я думаю, що надійніше використовувати регулярні вирази:

import re

for i, line in enumerate(content):
    print line if not (re.match('\r?\n', line)) else pass

Це відповідало б Windows / unix. Крім того, якщо ви не впевнені в рядках, що містять лише пробіл char, ви можете використовувати '\s*\r?\n'як вираз

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.