web-dev-qa-db-fra.com

Importer un fichier txt et avoir chaque ligne sous forme de liste

Je suis un nouvel utilisateur Python.

J'ai un fichier txt qui ressemblera à:

3,1,3,2,3
3,2,2,3,2
2,1,3,3,2,2
1,2,2,3,3,1
3,2,1,2,2,3

mais peut être moins ou plus de lignes.

Je souhaite importer chaque ligne sous forme de liste.

Je sais que tu peux le faire comme tel:

filename = 'MyFile.txt' 
fin=open(filename,'r')
L1list = fin.readline()
L2list = fin.readline()
L3list = fin.readline()

mais comme je ne sais pas combien de lignes je vais avoir, existe-t-il un autre moyen de créer des listes individuelles?

14
John

Ne créez pas de listes distinctes; créer une liste de listes:

results = []
with open('inputfile.txt') as inputfile:
    for line in inputfile:
        results.append(line.strip().split(','))

ou mieux encore, utilisez le module csv :

import csv

results = []
with open('inputfile.txt', newline='') as inputfile:
    for row in csv.reader(inputfile):
        results.append(row)

Les listes ou les dictionnaires sont loin des structures supérieures pour garder une trace d'un nombre arbitraire de choses lues dans un fichier.

Notez que l'une ou l'autre boucle vous permet également d'adresser les lignes de données individuellement sans avoir à lire tout le contenu du fichier en mémoire; au lieu d'utiliser results.append() il suffit de traiter cette ligne là.

Par souci d'exhaustivité, voici la version compacte à une ligne pour lire d'un fichier CSV dans une liste en une seule fois:

import csv

with open('inputfile.txt', newline='') as inputfile:
    results = list(csv.reader(inputfile))
26
Martijn Pieters

Créez une liste de listes:

with open("/path/to/file") as file:
    lines = []
    for line in file:
        # The rstrip method gets rid of the "\n" at the end of each line
        lines.append(line.rstrip().split(","))
4
iCodez
with open('path/to/file') as infile: # try open('...', 'rb') as well
    answer = [line.strip().split(',') for line in infile]

Si vous voulez que les nombres soient ints:

with open('path/to/file') as infile:
    answer = [[int(i) for i in line.strip().split(',')] for line in infile]
2
inspectorG4dget