[PYTHON] Je souhaite lire le CSV ligne par ligne lors de la conversion du type de champ (tout en affichant la barre de progression) et le traiter.

Un exemple de lecture du CSV ligne par ligne tout en convertissant le champ tout en affichant la barre de progression et en faisant quelque chose. La barre de progression est cliquez.

Je vais coller le code pour le moment (C'est aussi un exemple de la façon d'écrire un itérateur qui peut être utilisé avec en quelque sorte ...)

Cliquez ici pour field_converter.py: https://gist.github.com/naoyat/3db8cd96c8dcecb5caea C'est celui de l'article précédent "Je veux convertir par lots les résultats de" string ".split () en Python".

csv_iterator.py


import sys
import csv
import click
from field_converter import FieldConverter

class CSV_Iterator:
    def __init__(self, path, skip_header=False, with_progress_bar=False,
                 field_converter=None):
        self.path = path
        self.with_progress_bar = with_progress_bar
        self.field_converter = field_converter

        self.f = open(path, 'r')
        self.line_count = sum(1 for line in self.f)

        self.f.seek(0)  # rewind
        self.r = csv.reader(self.f, dialect='excel')
        if skip_header:
            self.r.next()
            self.line_count -= 1

        print '(%d lines)' % (self.line_count,)

        if self.with_progress_bar:
            self.bar = click.progressbar(self.r, self.line_count)

    def __iter__(self):
        return self

    def next(self):
        try:
            if self.with_progress_bar:
                fields = self.bar.next()
            else:
                fields = self.r.next()
            if self.field_converter:
                try:
                    fields = self.field_converter.convert(fields)
                except:
                    print sys.exc_info()
            return fields
        except:
            raise StopIteration

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type:
            return False
        if self.with_progress_bar:
            print
        self.f.close()
        return True

Je vais le mettre sur l'essentiel. https://gist.github.com/naoyat/b1290d917638c412e140

Exemple d'utilisation.

example.py


from csv_iterator import CSV_Iterator

def foobar(csv_path):
    with CSV_Iterator(csv_path,
                  skip_header=True,
                  with_progress_bar=True,
                  field_converter=FieldConverter(int, int, 'iso-8859-1', 'iso-8859-1', float)) as line:
        for id, uid, title, query, target in line:
            ...

Recommended Posts

Je souhaite lire le CSV ligne par ligne lors de la conversion du type de champ (tout en affichant la barre de progression) et le traiter.
Je veux afficher la barre de progression
Je souhaite enregistrer les photos envoyées par LINE vers S3
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Je veux afficher la progression en Python!
[Introduction] J'ai essayé de l'implémenter moi-même tout en expliquant l'arbre de dichotomie
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
[Introduction] J'ai essayé de l'implémenter moi-même tout en expliquant pour comprendre la dichotomie
Lisez le fichier csv et affichez-le dans le navigateur
Je veux trouver l'intersection d'une courbe de Bézier et d'une ligne droite (méthode de découpage de Bézier)
Je souhaite générer une sortie lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
[Go] Je souhaite séparer les points de terminaison en lisant / en écrivant dans la base de données
Je veux connaître la nature de Python et pip
Je veux rendre le type de dictionnaire dans la liste unique
Je souhaite mapper le code EDINET et le numéro de valeur
Je veux que Sphinx soit pratique et utilisé par tout le monde
Je veux connaître la légende du monde des technologies informatiques
Comme la date Excel lue par pandas.read_excel était une valeur de série, elle a été convertie en datetime.datetime.
Gratter la liste des magasins membres Go To EAT dans la préfecture de Fukuoka et la convertir en CSV
Je veux créer un histogramme et superposer la courbe de distribution normale dessus. édition matplotlib
Gratter la liste des magasins membres Go To EAT dans la préfecture de Niigata et la convertir en CSV
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Je veux connaître la météo avec LINE bot avec Heroku + Python
Je veux lire la version html de la version "OpenCV-Python Tutorials" OpenCV 3.1
Lire la feuille Excel et le processus en boucle ligne par ligne Python VBA
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux faire revivre la légendaire combinaison Nintendo en utilisant pleinement l'IA et la technologie RH!
Je souhaite recevoir le fichier de configuration et vérifier si le fichier JSON généré par jinja2 est un JSON valide
[Golang] Je veux ajouter omitempty à la balise json du champ de type int de la structure afin qu'il soit ignoré si 0 est entré.