Hoe één bestand regel voor regel naar een lijst in Python te lezen

Jinku Hu 30 januari 2023 20 december 2019
  1. readlines om het bestand regel voor regel in Python te lezen
  2. Herhaal de bestandsmethode om een ​​bestand regel voor regel in Python te lezen
  3. file.read methode om het bestand regel voor regel in Python te lezen
  4. Vergelijking van verschillende methoden voor het regel voor regel lezen van een bestand in Python
Hoe één bestand regel voor regel naar een lijst in Python te lezen

Stel dat we een bestand hebben met de onderstaande inhoud,

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

We moeten de inhoud van het bestand regel voor regel om een lijst te lezen ["Line One: 1", "Line Two: 2", "Line Three: 3", "Line Four: 4", "Line Five: 5"].

We zullen verschillende methoden introduceren om een ​​bestand regel voor regel in een onderstaande lijst te lezen.

readlines om het bestand regel voor regel in Python te lezen

readlines geeft een lijst met regels uit de stream terug.

>>> 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']

Het eindkarakter \n wordt ook opgenomen in de tekenreeks en kan worden verwijderd met 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']

Herhaal de bestandsmethode om een ​​bestand regel voor regel in Python te lezen

We kunnen het bestand herhalen om het regel voor regel te lezen in plaats van te gebruiken 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']

Deze methode is veel beter dan de bovenstaande methode vanuit het perspectief van geheugengebruik. readlines methode bevat alle regels van het bestand in het geheugen, maar de interatiemethode neemt slechts één regel van de bestandsinhoud naar het geheugen en verwerkt deze. Het heeft de voorkeur als de bestandsgrootte super groot is om te vermijden MemoryError.

file.read methode om het bestand regel voor regel in Python te lezen

file.read(size=-1, /) leest van het bestand tot EOF als size niet is ingesteld. We kunnen de lijnen ervan splitsen door de str.splitlines functie te gebruiken.

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

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

Het resultaat bevat niet het laatste teken \n in de standaardmethode str.splitlines . Maar je kan opnemen \n als de keepends parameter is ingesteld op 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']

Vergelijking van verschillende methoden voor het regel voor regel lezen van een bestand in Python

We zullen de efficiëntieprestaties vergelijken tussen de verschillende methoden die in dit artikel worden geïntroduceerd. We verhogen het aantal regels in het geteste bestand om 8000 het prestatieverschil gemakkelijk te vergelijken.

>>> 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() methode is iets beter dan de bestandsiteringsmethode en file.read().splitlines() is de meest efficiënte methode met een marge van meer dan 25% in vergelijking met de andere twee methoden.

Maar als in de BigData toepassing waar geheugen de beperkende factor is, is de methode voor het itereren van bestanden de beste zoals hierboven uitgelegd.

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

Gerelateerde Artikelen - Python String