Как прочитать один файл строка за строкой к списку на Python
- Чтение файла построчно на Python
- Итерация по файловому методу чтения файла строка за строкой на Python
-
file.read
метод чтения файла строка за строкой на Python - Сравнение различных методов чтения файла строка за строкой на 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
, где память является ограничителем, то метод итерации файлов является лучшим, как объяснялось выше.