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?
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))
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(","))
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 int
s:
with open('path/to/file') as infile:
answer = [[int(i) for i in line.strip().split(',')] for line in infile]