IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Récupérer toutes les lignes contenant une valeur d'un CSV trop grand pour être ouvert.


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Enquêteur PJ
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enquêteur PJ
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Récupérer toutes les lignes contenant une valeur d'un CSV trop grand pour être ouvert.
    Bonjour à tous,

    j'ai un fichier .CSV à traiter d'une taille de plusieurs gigaoctets !

    Je souhaite donc, sans l'ouvrir, y rechercher une valeur et le cas échéant, extraire la ligne correspondante.
    Le résultat serait un nouveau .csv ne comportant que les lignes contenant la valeur recherchée.

    A titre info, un grep de 2 heures m'a permis de confirmer la présence de cette valeur à 1037 reprises.
    Malheureusement, j'ai besoin des éléments qui s'y rattachent.

    J'espère être suffisamment clair dans ma demande.

    Merci de votre aide et bonne journée.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    D'après la doc [0], csv.reader retourne un object itérateur, donc sans charger le fichier en mémoire.

    Essaye avec l'exemple donné dans cette doc pour commencer.

    [0] https://docs.python.org/3/library/csv.html#csv.reader

  3. #3
    Candidat au Club
    Homme Profil pro
    Enquêteur PJ
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enquêteur PJ
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci de votre collaboration.

    Je ne vois pas comment transposer l'exemple à mes besoins (fichier d'origine/chaîne de caractère recherchée/fichier de sortie).
    Je n'ai malheureusement pas suffisamment de connaissances dans ce domaine, bien que je sois quasi-certain qu'il peut y répondre.

    J'aimerais obtenir une commande.py prête à l'emploi (en transposant mes références de fichiers et de chaînes de caractère bien sûr).

    Merci encore.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par eric_du_80 Voir le message
    Je ne vois pas comment transposer l'exemple à mes besoins (fichier d'origine/chaîne de caractère recherchée/fichier de sortie).
    C'est pourtant pas compliqué.
    Je retape l'exemple en y mettant des commentaires et en supprimant toutes les fioritures
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Ouverture CSV - Ici tu y mets donc ton propre fichier à ouvrir
    csvfile=open('eggs.csv', newline='')
     
    # Création de l'itérateur de lecture
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
     
    # Traitement de chaque ligne du fichier
    for row in spamreader:
    	# Traitement des colonnes de la ligne (stockées dans le tableau "row") - Donc peu importe que la ligne possède 5 ou 500 colonnes
    	print(', '.join(row))
     
    # Fermeture CSV
    csvfile.close()

    Donc voilà. Ne te reste qu'à voir quel row[x] tu as besoin pour faire ton traitement et le mettre à la place du print().

    Citation Envoyé par eric_du_80 Voir le message
    J'aimerais obtenir une commande.py prête à l'emploi (en transposant mes références de fichiers et de chaînes de caractère bien sûr).
    Bien sûr...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par eric_du_80 Voir le message
    A titre info, un grep de 2 heures m'a permis de confirmer la présence de cette valeur à 1037 reprises.
    Malheureusement, j'ai besoin des éléments qui s'y rattachent.
    Si vous savez trier vos lignes avec "grep", vous savez créer un nouveau fichier avec les 1037 lignes qui matchent (en redirigeant la sortie).
    Et s'il y a des éléments qui s'y rattachent, traduire cela en Python n'y changera pas grand chose: on ne sait pas ce qu'ils sont.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par eric_du_80 Voir le message
    un grep de 2 heures
    c'est absurde un temps d'accès pareil, perso ça fait un bail que j'aurai éclaté le fichier en quelques milliers d'autres, en une arborescence, ou dans une base de données
    le format csv n'est clairement pas adapté au besoin ici et l'accès séquentiel aux données représente le principal goulot d'étranglement.
    au delà il est aussi peut-être possible d'accélérer un peu les traitements avec les bonnes options de grep (comme -F par exemple), mais ça n'est qu'une rustine.

  7. #7
    Candidat au Club
    Homme Profil pro
    Enquêteur PJ
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enquêteur PJ
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    j'ai effectivement utilisé la fonction grep et j'ai récupéré les 1037 lignes qui m'intéressent.
    Je pensais pouvoir obtenir un petit script en python ou autre qui me permette d'automatiser cette recherche, car elle risque de se reproduire !!
    Encore merci pour votre aide.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par eric_du_80 Voir le message
    j'ai effectivement utilisé la fonction grep et j'ai récupéré les 1037 lignes qui m'intéressent.

    Je pensais pouvoir obtenir un petit script en python ou autre qui me permette d'automatiser cette recherche, car elle risque de se reproduire !
    Rien ne vous empêche de mettre ces instructions grep dans un script BASH et passer en paramètre noms de fichiers et chaine à rechercher.

    Après comme le fait parfois remarquer Sve@r, ici, c'est pas pronto Python: on ne code pas pour vous et si vous voulez programmer avec Python, il faut commencer par apprendre et vous avez plein de tutos. pour çà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/11/2018, 14h09
  2. Réponses: 6
    Dernier message: 01/05/2018, 17h58
  3. [XL-2013] Sélectionner toutes les cellules contenant une valeur
    Par krietj dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2015, 09h45
  4. Réponses: 2
    Dernier message: 23/04/2009, 10h24
  5. Réponses: 1
    Dernier message: 22/04/2009, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo