2014-09-16 3 views
0

Я хотел прочитать строку из текстового файла и удалить пустые или пустые строки в конце файла с помощью .strip(), но он, похоже, не работает. Однако тестирование внутри интерактивного режима работает, как ожидалось.Python .strip() не удаляет пустые строки

Пример текстового файла под названием списке имен:

Bob 555-333-4444 
Sam 234-343-1234 
<blank line> 

Использование интерактивного вывода режима:

>>> str = 'Bob 555-333-4444\nSam 234-343-1234\n' 
>>> print (str) 
Bob 555-333-4444 
Sam 234-343-1234 

>>> newStr = str.strip() 
>>> print (newStr) 
Bob 555-333-4444 
Sam 234-343-1234 
>>> 

Использование открытой функции для чтения текстового файла:

list = [] 

def readStr(): 

     f = open ('nameList.txt', 'r') 

     for line in f: 
       row = line.strip() 
       print (row) 

     f.close() 

Выход из функции readStr():

>>> readStr() 
Bob 555-333-4444 
Sam 234-343-1234 

>>> 

Есть ли у него что-то делать с "открытой/чтения" функции?

+0

Ваши два отрывка делают разные вещи, почему ожидают тех же результатов? – jonrsharpe

+1

Возможно, вы предпочтете полностью пропустить цикл 'for' и просто сделать' print f.read(). Strip() ' – Kevin

+0

Вы говорите, что функция .strip() не работает одинаково, когда она находится в интерактивном режиме режим по отношению к вызову в функции? Я в конечном итоге хотел поместить его в список, чтобы я мог обрабатывать каждый параметр, поэтому я не использовал f.read(). – dreamzboy

ответ

1

str.strip() только удаляет пробелы с концов строки. С

'Bob 555-333-4444\nSam 234-343-1234\n'.strip() 

вопрос не то, что вы используете его в интерактивном режиме, но у вас есть несколько строк (текст отделены друг от друга \n символов) в одной строки. В результате

'Bob 555-333-4444\nSam 234-343-1234' 

после снятия окончательного символа новой строки.

В другом примере вы вызываете strip на ряд отдельных строк, которые состоят из одной строки, т. Е. Единственная строка новой строки находится в конце строки. Затем вы печатаете результат. Несмотря на то, что '\n'.strip() == '', результат по-прежнему является строкой, просто пустой, которая при печати print(row) создает пустую строку (пустая строка плюс новая строка, предоставленная print).

+0

Теперь ваше объяснение имеет большой смысл. Спасибо! Любая идея, как я собираюсь удалить эту пустую строку перед добавлением в список? – dreamzboy

+0

Просто проверьте, пуст ли он до добавления: 'if row! = '': Print (row)'. – chepner

+0

Спасибо, спасибо! Я пропустил простоту. – dreamzboy

Смежные вопросы