Чтение файла без перевода строки в Python

В Python вызывается

temp = open(filename,'r').readlines()

приводит к списку, в котором каждый элемент представляет собой строку в файле. Это немного глупо, но все же: readlines() также пишет символ новой строки для каждого элемента, чего я не желаю.

Как я могу избежать этого?

Ответ 1

Вы можете прочитать весь файл и разделить строки, используя str.splitlines:

temp = file.read().splitlines()

Или вы можете разбить новую строку вручную:

temp = [line[:-1] for line in file]

Примечание: это последнее решение работает только в том случае, если файл заканчивается символом новой строки, иначе последняя строка потеряет символ.

Это предположение верно в большинстве случаев (особенно для файлов, созданных текстовыми редакторами, которые в любом случае добавляют конец новой строки).

Если вы хотите этого избежать, вы можете добавить новую строку в конце файла:

with open(the_file, 'r+') as f:
    f.seek(-1, 2)  # go at the end of the file
    if f.read(1) != '\n':
        # add missing newline if not already present
        f.write('\n')
        f.flush()
        f.seek(0)
    lines = [line[:-1] for line in f]

Или проще использовать strip вместо новой строки:

[line.rstrip('\n') for line in file]

Или даже, хотя довольно нечитаемый:

[line[:-(line[-1] == '\n') or len(line)+1] for line in file]

Используется тот факт, что возвращаемое значение or не является логическим, но объект, который был оценен как true или false.


Метод readlines фактически эквивалентен:

def readlines(self):
    lines = []
    for line in iter(self.readline, ''):
        lines.append(line)
    return lines

# or equivalently

def readlines(self):
    lines = []
    while True:
        line = self.readline()
        if not line:
            break
        lines.append(line)
    return lines

Так как readline() поддерживает также символ новой строки readlines().

Примечание: для симметрии readlines() метод writelines() не добавляет окончание новых строк, поэтому f2.writelines(f.readlines()) создает точную копию f в f2.

Ответ 2

temp = open(filename,'r').read().split('\n')

Ответ 3

temp = open(filename,'r').read().splitlines()

Ответ 4

другой пример:

Чтение файла по одной строке за раз. Удаление ненужных символов с конца строки str.rstrip(chars)

with open(filename, 'r') as fileobj:
    for row in fileobj:
        print( row.rstrip('\n') )

см. также str.strip([chars]) и str.lstrip([chars])

(python> = 2.0)

Ответ 5

Я думаю, что это лучший вариант.

temp = [line.strip() for line in file.readlines()]

Ответ 6

Попробуй это:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  

Ответ 7

import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])

Ответ 8

Чтобы удалить все начальные и конечные пробелы (вдохновлено Абага Ответ) -

temp = [line.strip() for line in open("filename")]

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

temp = [line.rstrip() for line in open("filename")]

Если вы просто хотите удалить завершающий символ новой строки, а не пробелы -

temp = [line.rstrip('\r\n') for line in open("filename")]

P.S. Если вы найдете это полезным, пожалуйста, подпишите его.

Ответ 9

my_file = open("first_file.txt", "r")
for line in my_file.readlines():
    if line[-1:] == "\n":
        print(line[:-1])
    else:
        print(line)
my_file.close() 

Ответ 10

def getText():
    file=open("ex1.txt","r");

    names=file.read().split("\n");
    for x,word in enumerate(names):
        if(len(word)>=20):
            return 0;
            print "length of ",word,"is over 20"
            break;
        if(x==20):
            return 0;
            break;
    else:
        return names;


def show(names):
    for word in names:
        len_set=len(set(word))
        print word," ",len_set


for i in range(1):

    names=getText();
    if(names!=0):
        show(names);
    else:
        break;