В Python звоню
temp = open(filename,'r').readlines()
в результате получается список, в котором каждый элемент является строкой в файле. Это немного глупо, но все же: я readlines()
также пишу символ новой строки для каждого элемента, чего я не желаю.
Как я могу избежать этого?
python
line-breaks
readlines
Yotam
источник
источник
[l.strip('\n\r') for l in temp]
. Или дажеrstrip
. И с итерации здесь это может бытьin open
вместоin temp
.newline
аргумента open для этого разбитого конечного символа новой строки.Ответы:
Вы можете прочитать весь файл и разделить строки, используя
str.splitlines
:Или вы можете удалить новую строку вручную:
Примечание: это последнее решение работает, только если файл заканчивается новой строкой, в противном случае последняя строка потеряет символ.
Это предположение верно в большинстве случаев (особенно для файлов , созданных с помощью текстовых редакторов, которые часто делают добавить окончание новой строки в любом случае).
Если вы хотите избежать этого, вы можете добавить новую строку в конце файла:
Или более простая альтернатива
strip
вместо новой строки:Или даже, хотя довольно нечитаемо
Который использует тот факт, что возвращаемое значение
or
не является логическим значением, но объект, который был оценен как истина или ложь.readlines
Метод фактически эквивалентно:Так как
readline()
сохраняет перевод строки, такжеreadlines()
сохраняет его.Примечание: для симметрии к
readlines()
вwritelines()
методе вовсе не добавлять окончания перевода строки, поэтомуf2.writelines(f.readlines())
производит точную копиюf
вf2
.источник
[line.rstrip('\n') for line in file]
удалит более одного трейлинг\n
.[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
могло бы быть[line[:-(line[-1] == '\n') or None] for line in file]
.for line in (x.strip() for x in f):
with
при завершении блока файлы закрываются, что означает, что вы не можете делатьwith open(...) as f: lines = (line for line in f)
и использоватьlines
вне,with
потому что вы получите ошибку ввода-вывода. Вы можете быть ленивым, используя genexp, но вы должны использовать его перед закрытием файла.источник
\r\n
переводом строки? ;).split('\n')
будет корректно разбиваться независимо от соглашения о новой строке. Было бы важно, если вы читаете файл в двоичном режиме. В этом случаеsplitlines()
обрабатывает универсальные символы новой строки, аsplit('\n')
не.os.linesep
:)\r\n
окончания строк не преобразовывались\n
в текстовые или двоичные,os.linesep
то работали бы там, где\n
это не так. Ноsplitlines
, очевидно, это лучший выбор, если вы упомянули, где файл не соответствует ОС. На самом деле я в основном упоминал об этом на тот случай, если люди, смотрящие на это обсуждение, не знали о его существовании.\r\n
будут преобразованы для текстовых файлов, даже если вы работаете в Linux.другой пример:
Чтение файла по одной строке за раз. Удаление нежелательных символов с конца строки
str.rstrip(chars)
смотри также
str.strip([chars])
иstr.lstrip([chars])
(python> = 2.0)
источник
источник
Я думаю, что это лучший вариант.
источник
temp = [line.rstrip() for line in file.readlines()]
то, что предназначено для заметок @Roland_Illig..readlines()
вы эффективно перебираете весь файл дважды.Попробуй это:
источник
источник
.readlines()
это, вы эффективно перебираете весь файл дважды.источник
источник