Question En Python, comment lire un fichier ligne par ligne dans une liste?


Comment lire chaque ligne d'un fichier en Python et stocker chaque ligne en tant qu'élément dans une liste?

Je veux lire le fichier ligne par ligne et ajouter chaque ligne à la fin de la liste.


1694
2017-07-18 22:25


origine


Réponses:


with open(fname) as f:
    content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content] 

1649
2017-07-18 22:28



Voir Entrée et sortie:

with open('filename') as f:
    lines = f.readlines()

ou avec l'effacement du caractère de nouvelle ligne:

lines = [line.rstrip('\n') for line in open('filename')]

Note de l'éditeur: La commande whitespace-stripping originale de cette réponse, line.strip(), comme l'a laissé entendre le commentaire de Janus Troelsen, supprimerait tout en avant et en arrière espace, pas seulement le suivi \n.


779
2017-07-18 22:28



Ceci est plus explicite que nécessaire, mais fait ce que vous voulez.

with open("file.txt", "r") as ins:
    array = []
    for line in ins:
        array.append(line)

367
2017-07-18 22:27



Cela donnera un "tableau" de lignes à partir du fichier.

lines = tuple(open(filename, 'r'))

206
2017-07-18 22:27



Si vous voulez le \n inclus:

with open(fname) as f:
    content = f.readlines()

Si tu ne veux pas \n inclus:

with open(fname) as f:
    content = f.read().splitlines()

150
2018-03-02 04:22



Vous pourriez simplement faire ce qui suit, comme cela a été suggéré:

with open('/your/path/file') as f:
    my_lines = f.readlines()

Notez que cette approche a deux inconvénients:

1) Vous stockez toutes les lignes en mémoire. Dans le cas général, c'est une très mauvaise idée. Le fichier peut être très volumineux et vous pourriez manquer de mémoire. Même si ce n'est pas grand, c'est simplement un gaspillage de mémoire.

2) Cela n'autorise pas le traitement de chaque ligne lorsque vous les lisez. Donc, si vous traitez vos lignes après cela, ce n'est pas efficace (nécessite deux passes plutôt qu'une).

Une meilleure approche pour le cas général serait la suivante:

with open('/your/path/file') as f:
    for line in f:
        process(line)

Où vous définissez votre fonction de processus comme vous le souhaitez. Par exemple:

def process(line):
    if 'save the world' in line.lower():
         superman.save_the_world()

(La mise en œuvre de Superman classe est laissé comme un exercice pour vous).

Cela fonctionnera bien pour n'importe quelle taille de fichier et vous parcourez votre fichier en seulement 1 passe. C'est typiquement comment les parseurs génériques fonctionneront.


91
2018-02-25 09:13



Si vous ne vous souciez pas de fermer le fichier, ce one-liner fonctionne:

lines = open('file.txt').read().split("\n")

le traditionnel façon:

fp = open('file.txt') # Open file on read mode
lines = fp.read().split("\n") # Create a list containing all lines
fp.close() # Close file

En utilisant with (conseillé):

with open('file.txt') as fp:
    lines = fp.read().split("\n")

61
2018-04-20 05:53