Salut,
je suis à la recherche d'une fonction pour lire les fichiers de très
grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble,
de plus elle ne me convient pas car je vais devoir rassembler
plusieures lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un
peu.
Je recherche une fonction du type :
_lire dans le fichier jusqu'a lecture de la sequence 'xyz'.
_lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre
classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un
curseur dans le fichier)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Amaury
Salut, je suis à la recherche d'une fonction pour lire les fichiers de très grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble, de plus elle ne me convient pas car je vais devoir rassembler plusieures lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un peu.
Je recherche une fonction du type : _lire dans le fichier jusqu'a lecture de la sequence 'xyz'. _lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un curseur dans le fichier)
J'allais répondre "utilise xreadlines à la place de readlines". Mais en regardant la doc, j'ai vu qu'à partir de python2.3, il vaut mieux utiliser "for line in file". Donc pour lire jusqu'à la séquence 'xyz', on peut utiliser:
f = open('monfichier')
lines = [] for line in f: if 'xyz' in line: break lines.append(line)
Attention, ça ne marche qu'avec des fichiers texte, la lecture se fait ligne par ligne. Et la mémoire utilisée reste minimale. Comme quoi en python, il n'y a pas que les fonctions, les objets de base ont déjà le comportement qu'il faut !
-- Amaury
Salut,
je suis à la recherche d'une fonction pour lire les fichiers de très
grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble, de
plus elle ne me convient pas car je vais devoir rassembler plusieures
lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un peu.
Je recherche une fonction du type :
_lire dans le fichier jusqu'a lecture de la sequence 'xyz'.
_lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre
classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un
curseur dans le fichier)
J'allais répondre "utilise xreadlines à la place de readlines".
Mais en regardant la doc, j'ai vu qu'à partir de python2.3, il vaut
mieux utiliser "for line in file".
Donc pour lire jusqu'à la séquence 'xyz', on peut utiliser:
f = open('monfichier')
lines = []
for line in f:
if 'xyz' in line:
break
lines.append(line)
Attention, ça ne marche qu'avec des fichiers texte, la lecture se fait
ligne par ligne. Et la mémoire utilisée reste minimale.
Comme quoi en python, il n'y a pas que les fonctions, les objets de base
ont déjà le comportement qu'il faut !
Salut, je suis à la recherche d'une fonction pour lire les fichiers de très grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble, de plus elle ne me convient pas car je vais devoir rassembler plusieures lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un peu.
Je recherche une fonction du type : _lire dans le fichier jusqu'a lecture de la sequence 'xyz'. _lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un curseur dans le fichier)
J'allais répondre "utilise xreadlines à la place de readlines". Mais en regardant la doc, j'ai vu qu'à partir de python2.3, il vaut mieux utiliser "for line in file". Donc pour lire jusqu'à la séquence 'xyz', on peut utiliser:
f = open('monfichier')
lines = [] for line in f: if 'xyz' in line: break lines.append(line)
Attention, ça ne marche qu'avec des fichiers texte, la lecture se fait ligne par ligne. Et la mémoire utilisée reste minimale. Comme quoi en python, il n'y a pas que les fonctions, les objets de base ont déjà le comportement qu'il faut !
-- Amaury
bruno modulix
Andréï wrote:
Salut, je suis à la recherche d'une fonction pour lire les fichiers de très grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble,
Il me semble aussi. Par contre, tu peux itérer directement sur l'objet file:
f = open('file.txt', 'r') for line in f: pass
de plus elle ne me convient pas car je vais devoir rassembler plusieures lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un peu.
Je recherche une fonction du type : _lire dans le fichier jusqu'a lecture de la sequence 'xyz'. _lire la suite jusqu'a la sequence 'xyz' ou la fin
Il y a plusieurs façons possibles de faire ça.
Est-ce que ce type de fonction existe ou il faut que me créer ma propre classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un curseur dans le fichier)
file.read() file.tell() file.seek()
Eventuellement, l'excellent Text Processing in Python de David Mertz peut être une lecture intéressante si tu dois parser du texte...
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Andréï wrote:
Salut,
je suis à la recherche d'une fonction pour lire les fichiers de très
grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble,
Il me semble aussi. Par contre, tu peux itérer directement sur l'objet file:
f = open('file.txt', 'r')
for line in f:
pass
de
plus elle ne me convient pas car je vais devoir rassembler plusieures
lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un peu.
Je recherche une fonction du type :
_lire dans le fichier jusqu'a lecture de la sequence 'xyz'.
_lire la suite jusqu'a la sequence 'xyz' ou la fin
Il y a plusieurs façons possibles de faire ça.
Est-ce que ce type de fonction existe ou il faut que me créer ma propre
classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un
curseur dans le fichier)
file.read()
file.tell()
file.seek()
Eventuellement, l'excellent Text Processing in Python de David Mertz
peut être une lecture intéressante si tu dois parser du texte...
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
Salut, je suis à la recherche d'une fonction pour lire les fichiers de très grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
La fonction readlines charge tout le fichier en mémoire il me semble,
Il me semble aussi. Par contre, tu peux itérer directement sur l'objet file:
f = open('file.txt', 'r') for line in f: pass
de plus elle ne me convient pas car je vais devoir rassembler plusieures lignes pour les besoins du traitement
Il y a tellement de fonctions dans python que l'on peut si perdre un peu.
Je recherche une fonction du type : _lire dans le fichier jusqu'a lecture de la sequence 'xyz'. _lire la suite jusqu'a la sequence 'xyz' ou la fin
Il y a plusieurs façons possibles de faire ça.
Est-ce que ce type de fonction existe ou il faut que me créer ma propre classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un curseur dans le fichier)
file.read() file.tell() file.seek()
Eventuellement, l'excellent Text Processing in Python de David Mertz peut être une lecture intéressante si tu dois parser du texte...
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
F. Petitjean
Salut, je suis à la recherche d'une fonction pour lire les fichiers de très grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
Je recherche une fonction du type : _lire dans le fichier jusqu'a lecture de la sequence 'xyz'. _lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un curseur dans le fichier)
Comme d'autres l'ont souligné, à partir de Python 2.3, la fonction
open() retourne un objet qui peut être utilisé comme itérateur. fin = open(fname) for line in fin: # traitement sur line
Avec itertools, on a la réponse à vos questions: import itertools
fin = open(fname) it = iter(fin) # lire jusqu'à 'xyzn': for line in itertools.takewhile(lambda ll : ll != 'xyzn', it): # traitement avant premier xyz
et faites help(itertools.chain) ...
Salut,
je suis à la recherche d'une fonction pour lire les fichiers de très
grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
Je recherche une fonction du type :
_lire dans le fichier jusqu'a lecture de la sequence 'xyz'.
_lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre
classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un
curseur dans le fichier)
Comme d'autres l'ont souligné, à partir de Python 2.3, la fonction
open() retourne un objet qui peut être utilisé comme itérateur.
fin = open(fname)
for line in fin:
# traitement sur line
Avec itertools, on a la réponse à vos questions:
import itertools
fin = open(fname)
it = iter(fin)
# lire jusqu'à 'xyzn':
for line in itertools.takewhile(lambda ll : ll != 'xyzn', it):
# traitement avant premier xyz
Salut, je suis à la recherche d'une fonction pour lire les fichiers de très grandes taille sans encombrer la ram du pc (plusieurs centaines de Mo)
Je recherche une fonction du type : _lire dans le fichier jusqu'a lecture de la sequence 'xyz'. _lire la suite jusqu'a la sequence 'xyz' ou la fin
Est-ce que ce type de fonction existe ou il faut que me créer ma propre classe? (il doit bien y avoir un moyen d'accéder en séquentiel avec un curseur dans le fichier)
Comme d'autres l'ont souligné, à partir de Python 2.3, la fonction
open() retourne un objet qui peut être utilisé comme itérateur. fin = open(fname) for line in fin: # traitement sur line
Avec itertools, on a la réponse à vos questions: import itertools
fin = open(fname) it = iter(fin) # lire jusqu'à 'xyzn': for line in itertools.takewhile(lambda ll : ll != 'xyzn', it): # traitement avant premier xyz