Arhn - архитектура программирования

Читать только первую строку файла?

Как с помощью Python получить только первую строку файла в виде строки?

15.12.2009

  • Если вы уже прочитали файл (после прочтения файла), вы уже прочитали первую строку! (Предполагая, что есть хотя бы одна строка.) 15.12.2009
  • Обратите внимание, что вопрос в нынешней формулировке имеет другое значение, чем изначально. Некоторые ответы теперь выглядят глупо, поскольку они учитывают после чтения часть файла (которая была удалена). 03.08.2016

Ответы:


1

Используйте метод .readline() (документы Python 2, документы Python 3):

with open('myfile.txt') as f:
    first_line = f.readline()

Некоторые примечания:

  1. Как отмечено в документации, если это не единственная строка в файле, строка, возвращаемая из f.readline(), будет содержать завершающую новую строку. Вместо этого вы можете использовать f.readline().strip(), чтобы удалить новую строку.
  2. Оператор with автоматически закрывает файл снова по завершении блока.
  3. Оператор with работает только в Python 2.5 и выше, а в Python 2.5 необходимо использовать from __future__ import with_statement
  4. В Python 3 вы должны указать кодировку файла для открываемого файла. Подробнее…
15.12.2009
  • В Python 3, если файл имеет формат ascii или utf8, вам не нужно указывать кодировку файла. И если это не так, вы все равно должны указать кодировку codecs.open в Python 2. 19.07.2012
  • @Evpok В Python 3, если файл имеет формат ascii или utf8, вам не нужно указывать кодировку файла - если бы это было строго верно! В реальности все немного запутаннее; как отмечено в документации, используемая кодировка по умолчанию зависит от платформы (и может отличаться даже на одном компьютере в зависимости от того, как вы запускаете Python - например, я видел код, который работал в моей обычной оболочке, предполагая, что UTF-8 позже взорвется при запуске через Apache с mod_wsgi). 24.10.2016
  • Я хочу прочитать около 5 строк, как я могу? 07.12.2020

  • 2

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

    my_file.seek(0)
    first_line = my_file.readline()
    
    15.12.2009
  • Для лучшего понимания это будет my_file.seek (0) line = my_file.readline () 04.09.2016

  • 3

    Это должно сделать это:

    f = open('myfile.txt')
    first = f.readline()
    
    15.12.2009

    4

    Здесь много других ответов, но чтобы ответить точно на вопрос, который вы задали (до того, как @MarkAmery пошел и отредактировал исходный вопрос и изменил значение):

    >>> f = open('myfile.txt')
    >>> data = f.read()
    >>> # I'm assuming you had the above before asking the question
    >>> first_line = data.split('\n', 1)[0]
    

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

    Обратите внимание, что это не включает символ \n в конце строки, но я предполагаю, что он вам все равно не нужен (а однострочный файл может даже не иметь его). Также обратите внимание, что, хотя он довольно короткий и быстрый, он делает копию данных, поэтому для действительно большого блока памяти вы можете не считать его «эффективным». Как всегда, это зависит от ...

    15.12.2009
  • Если это большой файл, f.read () попытается загрузить весь файл в память, что было бы не очень хорошей идеей. Альтернативой было бы чтение одного символа за раз, пока не встретится новая строка или EOF. 15.12.2009
  • На самом деле, все остальные ответы - лучшие альтернативы. Обычно чтение файла с помощью readline () и друзей загружает целые блоки за раз, может быть, 32 КБ плюс-минус, и просматривает их, чтобы найти следующую новую строку. Намного быстрее и эффективнее. Мой ответ был бы полезен только в том случае, если он уже загружает все, и в этом случае мы можем предположить, что он согласен с тем, чтобы все это было в памяти. 15.12.2009
  • Я не уверен, что изменил значение. Бессмысленно спрашивать, как прочитать первую строку из файла после прочтения всего файла. Таким образом, для меня довольно очевидно, что намерением спрашивающего было не предполагать, что первым должен быть вызван .read(). 17.10.2016
  • @MarkAmery, вопрос был плохо сформулирован (довольно бессмысленно), поэтому вы догадались о намерении (очевидно для меня) и изменили его, чтобы он соответствовал. Моя интерпретация отличается. Очевидно, до тех пор, пока harpalss не прояснит это, все, что у нас есть, - это исходная формулировка плюс его согласие с ответом (например, seek (0)), который для меня ясно показывает, что он уже уже прочитал в файле, по крайней мере за первой строкой. 18.10.2016
  • вы должны удалить этот ответ. это неправильный путь и может обмануть людей. 25.05.2017
  • @thang, спасибо за ваш вклад, но исходный вопрос был сформулирован таким образом, что мой ответ был технически обоснованным и должен был помочь в ситуации как описано. Я обновил его, чтобы указать, что вопрос был отредактирован и формулировка изменилась, и я думаю, что мои пояснения служат для предотвращения любого обмана людей. 26.05.2017
  • :) окей, я ленивый программист. Я поискал код в Интернете, а затем использовал его в спешке, чтобы попытаться запустить что-нибудь для демонстрации. По какой-то причине мой код очень медленный! Потребовалось некоторое время, чтобы узнать, что эта штука загружает в память 4 ГБ, прежде чем занять только первую строку! Ответ Tor на самом деле правильный. Есть много способов сделать что-то. Некоторые лучше. Некоторые хуже. Это плохо. Меня беспокоит, что это размещено сверху, а не ответ Tor. Я предположил, что это лучше, потому что он сверху, поэтому не стал проверять ... мля. Думаю, по большей части это моя лень. 26.05.2017
  • Кстати, вопрос: Читать только первую строку файла?, А не Как мне прочитать весь файл и взять первую строку? 26.05.2017
  • @thang, нет, ты не прав. Когда я ответил, вопрос был в том, что после прочтения файла, как вы скажете Python, чтобы он читал только первую строку? Я понял, что этот парень уже прочитал все содержимое файла и хотел знать, как извлечь первую строку. Я довольно четко об этом говорил с тех пор, как вопрос был отредактирован. 27.05.2017
  • Думаю, вы неправильно истолковали вопрос. чтобы прочитать только первую строку .... не только взять первую строку. Это можно интерпретировать как угодно. Я все еще думаю, что SO должен снизить рейтинг этого ответа. Можете ли вы придумать сценарий, в котором вы хотели бы сделать это вместо ответа Tor? 27.05.2017
  • @thang, правда, мы зря тратим время, чтобы все еще читали. Вы проголосовали против, и это все, что вам действительно нужно. Что касается интерпретации в любом случае, да, это может быть, поэтому я не ошибся, предложив ответ, который выбрал одну верную интерпретацию, даже если она вряд ли была лучшей. Наконец, да, если бы все данные были прочитаны по другим причинам, но вам все еще нужна была только первая строка (и вы были новичком в программировании), вы могли бы задать этот вопрос и найти мой ответ полезным. Пожалуйста, просто отпустите это ... никого это не смущает. 31.05.2017

  • 5
  • Вы не закрываете файл. Решение с with лучше. 21.12.2015

  • 6
  • Я пришел сюда в поисках этого. Тем более, что rstrip() удаляет символ новой строки. 27.10.2014
  • -1; это не закрывает файл и возвращает неверный результат, если первая строка содержит какие-либо завершающие пробелы, кроме самого символа новой строки. 24.10.2016
  • @MarkAmery: На самом деле, поскольку дескриптор файла не назначен переменной, он сразу же собирает мусор, который закрывает файл. (Хотя, конечно, принятое решение с использованием диспетчера контекста все же намного лучше.) 19.01.2018
  • @acdr То, что вы говорите, верно для CPython, но не для других реализаций Python - см., например, документы по сборке мусора PyPy которые упоминают в качестве особого интереса, что файлы ... не закрываются сразу же, когда они выходят за рамки. По этой причине обычно утверждается (например, на stackoverflow.com/a/7396043/1709587), что зависит от поведения, которое вы описывать - плохая практика. 25.01.2018

  • 7
  • Это тоже закрывает файл? 18.11.2016
  • В конце концов, когда Python покинет блок. 20.09.2018

  • 8
  • Есть несколько ответов старше пяти лет, содержащих именно такой подход. Вы ничего не делаете, кроме создания шума, добавляя еще один. 05.07.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..