Как прочитать один файл строка за строкой к списку на Python

  1. Чтение файла построчно на Python
  2. Итерация по файловому методу чтения файла строка за строкой на Python
  3. file.read метод чтения файла строка за строкой на Python
  4. Сравнение различных методов чтения файла строка за строкой на Python

Предположим, что у нас есть файл с содержанием, приведенным ниже,

Line One: 1
Line Two: 2
Line Three: 3
Line Four: 4
Line Five: 5

Нам нужно прочитать содержимое файла построчно к списку, ["Line One: 1", "Line Two: 2", "Line Three: 3", "Line Four: 4", "Line Five: 5"].

Ниже мы познакомим вас с различными методами чтения файлов построчно к списку.

Чтение файла построчно на Python

readlines возвращает список строк из потока.

>>> filePath = r"/your/file/path"
>>> with open(filePath, 'r', encoding='utf-8') as f:
	f.readlines()

	
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']

Окончательный символ \n также включен в строку и может быть удален с помощью str.rstrip('\n').

>>> with open(filePath, 'r', encoding='utf-8') as f:
	[_.rstrip('\n') for _ in f.readlines()]

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

Итерация по файловому методу чтения файла строка за строкой на Python

Мы могли бы выполнить итерацию по файлу, чтобы прочитать его построчно, а не использовать readlines.

>>> with open(filePath, 'r', encoding='utf-8') as f:
	[_.rstrip('\n') for _ in f]

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

С точки зрения использования памяти этот метод намного лучше, чем описанный выше. Метод readlines удерживает в памяти все строки файла, но метод чередования принимает в память только одну строку содержимого файла и обрабатывает ее. Предпочтительнее, если размер файла супербольшой, чтобы избежать MemoryError.

file.read метод чтения файла строка за строкой на Python

file.read(size=-1, /) читает из файла до EOF, если size не установлен. Мы можем разделить строки из него, используя функцию str.splitlines.

>>> with open(filePath, 'r') as f:
	f.read().splitlines()

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

В результате в метод str.splitlines по умолчанию не включается конечный символ \n. Но можно было бы включить \n, если бы параметр keepends был установлен как True.

>>> with open(filePath, 'r') as f:
	f.read().splitlines(keepends=True)

	
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']

Сравнение различных методов чтения файла строка за строкой на Python

Мы сравним эффективность различных методов, представленных в этой статье. Мы увеличиваем количество строк в тестируемом файле до 8000, чтобы легко сравнить разницу в производительности.

>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
			f.readlines()''',
	      setup='filePath=r"C:\Test\Test.txt"',
	      number = 10000)
16.36330720000001
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
			[_ for _ in f]''',
	      setup='filePath=r"C:\Test\Test.txt"',
	      number = 10000)
18.37279060000003
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
			f.read().splitlines()''',
	      setup='filePath=r"C:\Test\Test.txt"',
	      number = 10000)
12.122660100000019

Метод readlines () несколько лучше, чем метод итерации файлов, а file.read().splitlines() является наиболее эффективным методом с запасом более 25% по сравнению с двумя другими методами.

Но, если в приложении BigData, где память является ограничителем, то метод итерации файлов является лучшим, как объяснялось выше.

Сопутствующая статья - Python String

  • Как проверить, что строка пуста в Python
  • Как удалить белый пробел в строке на Python
  • Как конвертировать строку в дату на Python
  • Как преобразовать строку в нижний кейс на Python 2 и 3
  • Как проверить, содержит ли струна подвеску на Python
  • Как преобразовать список в струну на Python
  • Как преобразовать строку в плавучую или интру в Python
  • Как преобразовать строку в байты на Python
  • comments powered by Disqus