Проблема с чтением файла в Python - PullRequest
1 голос
/ 31 октября 2010

У меня есть файл: Alus.txt

Содержимое файла: (каждое имя в новой строке)

Margus

Михкель

Даниил

Марк

Юрий

Виктор

Марек

Николай

Павел

Калле

Проблема: Когда программа читает этот файл, после каждого имени есть \n (['Margus\n', 'Mihkel\n', 'Daniel\n', 'Mark\n', 'Juri\n', 'Victor\n', 'Marek\n', 'Nikolai\n', 'Pavel\n', 'Kalle']).Как я могу удалить \n и получить список с именами?Что я делаю не так?Спасибо.

alus = []

file = open('alus.txt', 'r')

while True:

    rida = file.readline()

    if (rida == ''):

        break

    else:

        alus.append(rida)

Ответы [ 4 ]

4 голосов
/ 31 октября 2010
alnus = [l.rstrip() for l in open('alus.txt', 'r')]
4 голосов
/ 31 октября 2010

Вы можете удалить разрывы строк с помощью rstrip :

alus = []
with open('alus.txt', 'r') as f:
    for rida in f:
        rida=rida.rstrip()
        if rida: alus.append(rida)
        else: break

Кстати, обычный способ проверить, является ли строка пустой, -

if not rida:

вместо

if (rida == ''):

И если у вас есть блок if...else, вы должны рассмотреть неотрицательную форму:

if rida:

так как обычно легче читать и понимать.

Редактировать: Мой предыдущий комментарий об удалении break был неверным. (Я ошибся break с continue.) Поскольку break останавливает цикл, его необходимо сохранить, чтобы сохранить поведение вашего исходного кода.

Редактировать 2: A.L. Фланаган справедливо указывает на то, что rstrip удаляет все завершающие пробелы, а не только конечные символы новой строки. Если вы хотите удалить только символы новой строки, вы можете использовать метод А. Л. Фланагана или перечислить символы, которые хотите удалить, в качестве аргумента для rstrip:

rida = rida.rstrip(r'\r\n')
3 голосов
/ 31 октября 2010

открыт ( 'alus.txt'). Чтения (). Splitlines ()

1 голос
/ 31 октября 2010

Одна из возможных проблем с rstrip () заключается в том, что он удалит все пробелы.Если вы хотите сохранить пробелы, вы можете использовать слайсы:

if line.endswith('\n'):
    line = line[:-1]

Если вы можете быть уверены, что все строки заканчиваются на '\ n', вы можете ускорить его, удалив if.Однако, как правило, вы не можете быть уверены, что последняя строка в текстовом файле имеет новую строку.

...