Ответ 1
Это должно делать то, что вы хотите (содержимое файла в списке, по строке, без \n)
with open(filename) as f:
mylist = f.read().splitlines()
У меня есть .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)
Это должно делать то, что вы хотите (содержимое файла в списке, по строке, без \n)
with open(filename) as f:
mylist = f.read().splitlines()
Я бы сделал это:
alist = [line.rstrip() for line in open('filename.txt')]
или
with open('filename.txt') as f:
alist = [line.rstrip() for line in f]
Вы можете использовать .rstrip('\n')
только для удаления строк в конце строки:
for i in contents:
alist.append(i.rstrip('\n'))
Это оставляет все остальные пробелы неповрежденными. Если вас не интересуют пробелы в начале и конце ваших строк, то большой тяжелый молот называется .strip()
.
Однако, поскольку вы читаете из файла и все равно потянули все в память, лучше использовать метод str.splitlines()
; это разделяет одну строку на разделителях строк и возвращает список строк без этих разделителей; используйте это в file.read()
и не используйте file.readlines()
:
alist = t.read().splitlines()
для каждой строки в вашем списке используйте .strip()
, который удаляет пробелы с начала или конца строки:
for i in contents:
alist.append(i.strip())
Но в зависимости от вашего варианта использования вам может быть полезно использовать что-то вроде numpy.loadtxt
или даже numpy.genfromtxt
, если вам нужен хороший массив данных, которые вы читаете из файла.
После открытия файла, понимание списка может сделать это в одной строке:
fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()
Не забудьте закрыть файл после этого.
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 сохраняются
У меня была та же проблема, и я нашел следующее решение очень эффективным. Я надеюсь, что это поможет вам или всем, кто хочет сделать то же самое.
Прежде всего, я бы начал с оператора "с", поскольку он обеспечивает правильное открытие/закрытие файла.
Он должен выглядеть примерно так:
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, поэтому извините, если он не в правильном форматировании.
Я использовал функцию полосы, чтобы избавиться от символа новой строки, поскольку разделенные строки бросали ошибки памяти в файл 4 gb.
Пример кода:
with open('C:\\aapl.csv','r') as apple:
for apps in apple.readlines():
print(apps.strip())
Недавно я использовал это для чтения всех строк из файла:
alist = open('maze.txt').read().split()
или вы можете использовать это для этой дополнительной дополнительной безопасности:
with f as open('maze.txt'):
alist = f.read().split()
Он не работает с пробелом между текстами в одной строке, но похоже, что ваш примерный файл может не иметь пробелов, разделяющих значения. Это простое решение, и оно возвращает точный список значений и не добавляет пустую строку: ''
для каждой пустой строки, например, в новой строке в конце файла.
with open('D:\\file.txt', 'r') as f1:
lines = f1.readlines()
lines = [s[:-1] for s in lines]
Самый простой способ сделать это - написать file.readline()[0:-1]
Это будет читать все, кроме последнего символа, который является новой линией.