Я хочу сгенерировать кучу файлов на основе шаблона. Шаблон имеет тысячи строк. Для каждого из новых файлов только 5 верхних строк различаются. Каков наилучший способ чтения всех строк, но сначала 5 сразу, а не читать весь файл в строках?Как читать много строк из файла сразу
ответ
Один подход должен был бы создать список из 5 первых линий, и прочитать остальное в большой буфер:
with open("input.txt") as f:
first_lines = [f.readline() for _ in range(5)]
rest_of_lines = f.read()
или более симметричным для первой части: создать 1 маленький буфер с 5 строк :
first_lines = "".join([f.readline() for _ in range(5)])
в качестве альтернативы, с чисто точки ввода/вывода зрения, самым быстрым будет
with open("input.txt") as f:
lines = f.read()
и использовать линии разделения генератор для чтения 5 первых линий (splitlines()
будет иметь катастрофические последствия в плане копирования памяти, найти реализацию here)
Действительно ли это на самом деле? Из того, что я собрал вместе из моего чтения, так что я, возможно, ошибаюсь, 'read()' буферирует строки так или иначе, поэтому может быть проще просто «прочитать» файл за один раз ради 5 строк? – roganjosh
Возможно, ввод-вывод будет быстрее, но после этого вам придется разделить содержимое на первые 5 строк, а остальное: удвоить требуемую память. –
Интересно, не думал об этом так. – roganjosh
объекты файлов в питоне довольно удобно их собственные объекты итераторов так что при вызове for line in f: ...
вы получаете файл по строкам. Объект файла имеет то, что обычно называют курсором, который отслеживает, откуда вы читаете. когда вы используете общий цикл for
, этот курсор каждый раз переходит к следующей новой строке и возвращает то, что он прочитал. Если прервать этот цикл до конца файла, вы можете забрать обратно вверх, где вы остановились с другим контуром или просто вызовом f.read()
прочитать остальную часть файла
with open(inputfile, 'r') as f:
lineN = 0
header = ""
for line in f:
header = header + line
lineN += 1
if lineN >= 4: #read first 5 lines (0 indexed)
break
body = f.read() #read the rest of the file
- 1. Как читать или заменять сразу несколько строк файла?
- 2. Как читать N количество строк из файла?
- 3. Как читать в определенных строк из файла
- 4. Как читать все данные сразу из текстового файла в JMeter
- 5. Чтение строк из файла
- 6. Сразу читать данные из DataSource
- 7. C# - как читать из случайных строк из текстового файла?
- 8. Как читать из файла
- 9. Как читать из файла?
- 10. Как удалить много строк сразу в приложении Laravel
- 11. как читать последние n строк из файла в C
- 12. Exec() читать из файла
- 13. Как извлечь много строк из файла и отделят же
- 14. Есть ли способ читать 10000 строк из файла в python?
- 15. vim - Как читать диапазон строк из файла в текущий буфер
- 16. Как читать N количество строк из файла в java randomly
- 17. Как читать определенное количество строк из файла в C
- 18. Как читать несколько строк данных из файла в python?
- 19. Как читать сегмент строк из одного файла в R?
- 20. Как читать несколько строк из текстового файла с фиксированной шириной?
- 21. C++ как читать только несколько строк из файла
- 22. Как читать строки из файла на основе критериев содержимого строк?
- 23. PHP, Как читать только пару строк из файла
- 24. Как читать только несколько строк из удаленного файла?
- 25. Как читать несколько строк из текстового файла в память?
- 26. Как я могу читать слова (вместо строк) из файла?
- 27. Как читать n строк из файла в clojure
- 28. Как читать произвольные, но непрерывные n строк из огромного файла
- 29. Как читать последние 5 строк из текстового файла в Java
- 30. Как эффективно читать миллионы строк из Кассандры?
вы имеете в виду: вы хотите прочитать 5 первых строк один за другим, а затем остальные? –
@ Jean-FrançoisFabre да – ddd
Я неправильно понял вопрос извините – roganjosh