web-dev-qa-db-fra.com

Est-il possible de lire un fichier .txt et de stocker chaque ligne en mémoire?

Je crée un petit programme qui va lire et afficher le texte d'un document. J'ai un fichier de test qui ressemble à ceci:

12,12,12
12,31,12
1,5,3
...

etc. Maintenant, je voudrais que Python lise chaque ligne et la stocke en mémoire. Ainsi, lorsque vous choisissez d'afficher les données, elles seront affichées dans le shell en tant que telles:

1. 12,12,12
2. 12,31,12
...

etc. Comment puis-je faire ceci?

7
EatMyApples

Je sais qu'il est déjà répondu :) Pour résumer ce qui précède:

# It is a good idea to store the filename into a variable.
# The variable can later become a function argument when the
# code is converted to a function body.
filename = 'data.txt'

# Using the newer with construct to close the file automatically.
with open(filename) as f:
    data = f.readlines()

# Or using the older approach and closing the filea explicitly.
# Here the data is re-read again, do not use both ;)
f = open(filename)
data = f.readlines()
f.close()


# The data is of the list type.  The Python list type is actually
# a dynamic array. The lines contain also the \n; hence the .rstrip()
for n, line in enumerate(data, 1):
    print '{:2}.'.format(n), line.rstrip()

print '-----------------'

# You can later iterate through the list for other purpose, for
# example to read them via the csv.reader.
import csv

reader = csv.reader(data)
for row in reader:
    print row

Il imprime sur ma console:

 1. 12,12,12
 2. 12,31,12
 3. 1,5,3
-----------------
['12', '12', '12']
['12', '31', '12']
['1', '5', '3']
18
pepr

Essayez de le stocker dans un tableau

f = open( "file.txt", "r" )
a = []
for line in f:
    a.append(line)
5
anselm

Merci pour l'excellente solution de @PePr. De plus, vous pouvez essayer d’imprimer le fichier .txt avec la méthode intégrée String.join(data). Par exemple:

with open(filename) as f:
    data = f.readlines()
print(''.join(data))
2
zongyan

Vous pouvez également être intéressé par le module csv. Il vous permet d’analyser, de lire et d’écrire dans des fichiers au format csv (valeurs séparées par des virgules) ... dans lesquels votre exemple semble se trouver.

Exemple:

import csv
reader = csv.reader( open( 'file.txt', 'rb'), delimiter=',' )
#Iterate over each row
for idx,row in enumerate(reader):
    print "%s: %s"%(idx+1,row)
1
Wes
#!/usr/local/bin/python

t=1

with open('sample.txt') as inf:
    for line in inf:
        num = line.strip() # contains current line
        if num:
            fn = '%d.txt' %t # gives the name to files t= 1.txt,2.txt,3.txt .....
            print('%d.txt Files splitted' %t)
            #fn = '%s.txt' %num
            with open(fn, 'w') as outf:
                outf.write('%s\n' %num) # writes current line in opened fn file
                t=t+1
0
with open('test.txt') as o:
    for i,t in enumerate(o.readlines(), 1):
        print ("%s. %s"% (i, t))
0
nywilken