Избавление от \n при использовании .readlines()

У меня есть .txt файл со значениями в нем.

Значения перечислены так:

Value1
Value2
Value3
Value4

Моя цель - поместить значения в список. Когда я это сделаю, список выглядит следующим образом:

['Value1\n', 'Value2\n', ...]

\n не требуется.

Вот мой код:

t = open('filename.txt', 'r+w')
contents = t.readline()

alist = []

for i in contents:
    alist.append(i)

Ответ 1

Это должно делать то, что вы хотите (содержимое файла в списке, по строке, без \n)

with open(filename) as f:
    mylist = f.read().splitlines() 

Ответ 2

Я бы сделал это:

alist = [line.rstrip() for line in open('filename.txt')]

или

with open('filename.txt') as f:
    alist = [line.rstrip() for line in f]

Ответ 3

Вы можете использовать .rstrip('\n') только для удаления строк в конце строки:

for i in contents:
    alist.append(i.rstrip('\n'))

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

Однако, поскольку вы читаете из файла и все равно потянули все в память, лучше использовать метод str.splitlines(); это разделяет одну строку на разделителях строк и возвращает список строк без этих разделителей; используйте это в file.read() и не используйте file.readlines():

alist = t.read().splitlines()

Ответ 4

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

for i in contents:
    alist.append(i.strip())

Но в зависимости от вашего варианта использования вам может быть полезно использовать что-то вроде numpy.loadtxt или даже numpy.genfromtxt, если вам нужен хороший массив данных, которые вы читаете из файла.

Ответ 5

После открытия файла, понимание списка может сделать это в одной строке:

fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()

Не забудьте закрыть файл после этого.

Ответ 6

from string import rstrip

with open('bvc.txt') as f:
    alist = map(rstrip, f)

Nota Bene: rstrip() удаляет пробелы, т.е. \f, \n, \r, \t, \v, \x и пробел ,
но я предполагаю, что вас интересует только сохранение значимых символов в строках. Тогда просто map(strip, f) подойдет лучше, удалив также пробелы заголовка.


Если вы действительно хотите исключить только символы NL \n и RF \r, выполните:

with open('bvc.txt') as f:
    alist = f.read().splitlines()

splitlines() без переданного аргумента не сохраняет символы NL и RF (Windows записывает файлы с NLRF в конце строк, по крайней мере на моей машине), но сохраняет другие пробелы, в частности пробелы и вкладки.

.

with open('bvc.txt') as f:
    alist = f.read().splitlines(True)

имеет тот же эффект, что и

with open('bvc.txt') as f:
    alist = f.readlines()

то есть NL и RF сохраняются

Ответ 7

У меня была та же проблема, и я нашел следующее решение очень эффективным. Я надеюсь, что это поможет вам или всем, кто хочет сделать то же самое.

Прежде всего, я бы начал с оператора "с", поскольку он обеспечивает правильное открытие/закрытие файла.

Он должен выглядеть примерно так:

with open("filename.txt", "r+") as f:
    contents = [x.strip() for x in f.readlines()]

Если вы хотите преобразовать эти строки (каждый элемент в списке содержимого - строка) в integer или float, вы можете сделать следующее:

contents = [float(contents[i]) for i in range(len(contents))]

Используйте int вместо float, если вы хотите преобразовать в integer.

Это мой первый ответ в SO, поэтому извините, если он не в правильном форматировании.

Ответ 8

Я использовал функцию полосы, чтобы избавиться от символа новой строки, поскольку разделенные строки бросали ошибки памяти в файл 4 gb.

Пример кода:

with open('C:\\aapl.csv','r') as apple:
    for apps in apple.readlines():
        print(apps.strip())

Ответ 9

Недавно я использовал это для чтения всех строк из файла:

alist = open('maze.txt').read().split()

или вы можете использовать это для этой дополнительной дополнительной безопасности:

with f as open('maze.txt'):
    alist = f.read().split()

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

Ответ 10

with open('D:\\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]

Ответ 11

Самый простой способ сделать это - написать file.readline()[0:-1] Это будет читать все, кроме последнего символа, который является новой линией.