Cours de base sur Python Traitement CSV (fonctions et classes n ° 1 CSV est lu et écrit)

Cet article s'adresse aux débutants en Python chez Django Girls Japan et elv, Ceci est un matériel pour les sessions d'étude. Puisque l'auteur est aussi un débutant, nous nous excusons pour tout inconvénient.

Environnement Namer: Windows 10 python3.5

Cette page contient les étapes de base pour lire le CSV et le cracher dans un autre format Cette page explique étape par étape. Tout d'abord, avant de créer une classe, écrivons le processus du début à la fin.

Lorsque vous exécutez le fichier créé cette fois, ce sera comme ceci

Cette fois, le CSV lu (addresslist.csv) est converti au format suivant. Exporter en tant que fichier CSV séparé (allcodelist.csv).


L'adresse et le numéro de téléphone sont des informations appropriées


addresslist.csv 6.JPG

allcodelist.csv 5.JPG

Créons un dossier

Tout d'abord, la préparation. Créez un nouveau dossier à n'importe quel emplacement. Sur la ligne de commande (Cliquez ici pour savoir comment ouvrir la ligne de commande [http://qiita.com/sandream/items/a0f69e69b561192517a2) Lorsque vous atteignez l'emplacement où vous souhaitez créer le dossier, entrez ** nom du dossier mkdir **. Cette fois, créez un dossier appelé adresse.

mkdir address

Préparation 2

Écrivez ce qui suit dans l'éditeur de texte dans le dossier créé, Enregistrez le fichier python.

# -*- coding: utf-8 -*-
#!/usr/bin/env python

Veuillez inclure ce qui précède au début du fichier. (L'explication du contenu ci-dessus est omise ici.) Donnez un nom au fichier et enregistrez-le avec une extension .py. (Le code de caractère est utf-8.) Il existe différents éditeurs de texte, mais l'auteur utilise ATOM.

Lire CSV

Ouvrez les données CSV et recevez des données

Maintenant que nous sommes prêts, chargeons csv. ** Variable = open (chemin du fichier que vous voulez lire, "r") ** Vous pouvez lire les données du fichier avec.

# -*- coding: utf-8 -*-
# !/usr/bin/env python


f = open("addresslist.csv", "r")
print(f)
f.close()

Ouvrez le fichier avec ouvrir et fermer le dernier fichier ouvert. J'imprime les données que j'ai reçues avant de fermer. Cette fois, j'ai mis le fichier csv dans le même dossier, donc Il est possible de recevoir uniquement par nom de fichier. (Si vous souhaitez lire un fichier dans un autre dossier, entrez le chemin.)

Quand j'exécute le fichier

1.JPG

Vous pouvez voir que vous avez bien reçu addresslist.csv.

Je veux changer le nom du fichier à lire à chaque fois

Bon, ça s'écarte un peu du flux d'origine, mais jusqu'ici dans le programme Le nom du fichier à lire a été fixé comme addresslist.csv. Cependant, dans certains cas, vous souhaiterez peut-être lire un fichier différent.

Nous allons vous montrer comment obtenir et utiliser le nom de fichier entré à l'invite de commande lors de l'exécution du fichier.

** module sys ** Import.

# -*- coding: utf-8 -*-
# !/usr/bin/env python
import sys
args = sys.argv
print(args)

** sys.argv ** est entré comme nom de fichier python lors de l'exécution du fichier à partir de l'invite de commande. Lorsque vous entrez, le contenu du texte entré après le nom de fichier python séparé par un espace demi-largeur sera reçu sous forme de liste.

Lorsque vous exécutez le fichier contenant le code ci-dessus, ce sera comme suit. 4.JPG

python allcode2.py "test" Si vous exécutez, vous pouvez voir que ** ['allcode2.py', 'test'] ** est renvoyé. python allcode2.py "test" "DjangoGirls" "elv" Si vous courez Vous pouvez voir que ** ['allcode2.py', 'test', 'DjangoGirls', 'elv'] ** est renvoyé. Commencez toujours la liste avec le nom du fichier Python que vous exécutez.

Utilisez cette fonction pour obtenir le nom du fichier et l'ouvrir.

# -*- coding: utf-8 -*-
# !/usr/bin/env python

import sys
import csv

args = sys.argv

filename = args[1]

f = open(filename, 'r')

for i in csv.DictReader(f):
    print(i)

J'ai mis la liste dans sys.argv dans une variable appelée args. Comme expliqué ci-dessus, le premier élément de la liste sera le nom du fichier exécuté, alors récupérez le deuxième élément de la liste. (Pour la liste, cliquez ici](http://qiita.com/sandream/items/e7a215a27c080cf8ac03)) Obtenez le nom du fichier csv que vous voulez lire avec args [1] dans la variable ** filename **.

Traitons les exceptions

Désormais, lorsque l'utilisateur exécute le fichier, s'il oublie d'entrer le nom du fichier, le fichier ne peut pas être ouvert et le programme échouera. Par conséquent, si vous oubliez d'entrer le nom du fichier ou si vous spécifiez un nom de fichier qui n'existe pas, quittez le programme et configurez-le pour afficher une erreur facile à comprendre. try: ** Que veux-tu faire ** except: ** Le traitement lorsque le programme essayé en cours d'essai ne peut pas être exécuté comme souhaité **

Cette fois, je présenterai deux méthodes de gestion des erreurs. (Un jour ... j'aimerais écrire séparément divers articles sur la gestion des erreurs.)

Le premier est le traitement lorsque l'utilisateur oublie d'entrer le nom du fichier. Si vous spécifiez ** filename = args [1] ** et que l'utilisateur n'entre pas de nom de fichier, une erreur se produira car [1] dans la liste n'existe pas.

Par conséquent, si une erreur se produit, je souhaite mettre fin au programme et informer l'utilisateur que le nom de fichier n'est pas inclus, procédez comme suit.

try:
    filename = args[1]
except:
    sys.exit("No file Name!")

Si vous faites cela, si vous l'exécutez sans spécifier le nom du fichier CSV à lire 8.JPG De cette façon, les caractères spécifiés dans () de sys.exit () sont affichés.

La prochaine fois que l'utilisateur saisira un nom de fichier, si le fichier n'existe pas, la variable filename contiendra le nom du fichier, Lors de l'ouverture avec ** f = open (filename, 'r') **, une erreur se produira car il n'y a pas de fichier.

Par conséquent, il est décrit comme suit.

try:
    filename = args[1]
    f = open(filename, 'r')
except IOError as e:
    sys.exit("Unable to open file: {}".format(e))

** Une erreur IOE ** se produit lorsque l'entrée ou la sortie échoue. Par exemple, une erreur qui se produit lorsque le disque est plein ou que le fichier d'entrée n'existe pas. ** IOError as e ** signifie que lorsqu'une exception se produit, l'objet contenant ces informations est défini comme "e" et le traitement qu'il contient (dans ce cas, seules les informations sont affichées) est exécuté. Cette fois, je voulais afficher un message d'erreur, alors je l'ai paramétré. Si vous ne souhaitez pas utiliser la valeur d'erreur, vous n'avez pas besoin de l'écrire.

Si vous spécifiez un nom de fichier approprié et que vous l'exécutez, 9.JPG Ce sera. Après Impossible d'ouvrir le fichier: est le message d'erreur IOError (la partie marquée e).

Dans ce programme, lorsque les deux erreurs ci-dessus se produisent, le programme sera arrêté même si le traitement des exceptions n'est pas effectué. Par exemple, en écrivant de nombreux programmes, je veux que vous puissiez exécuter ce processus, mais si vous ne pouvez pas, c'est très bien. A l'heure try: ** Que veux-tu faire ** except:  pass Ce faisant, vous pouvez l'utiliser pour ne rien faire si une erreur se produit. Je pense qu'il est bon de se souvenir.

De plus, si vous recevez un message d'erreur, faites une liste et écrivez-la dans le texte à la fin, vous pouvez vérifier ce qui n'a pas fonctionné une fois le programme terminé et vous pouvez le récupérer, ce qui est pratique. ..

Utilisez csv.DictReader ()

Cette fois, saisissez les données reçues sur la première ligne. La deuxième ligne et les suivantes créent un dictionnaire qui correspond à la valeur de chaque clé.

Par conséquent, utilisez le module csv. Tout d'abord, importez le module avec ** import csv **.

# -*- coding: utf-8 -*-
# !/usr/bin/env python
import csv

f = open("addresslist.csv", "r")

for i in csv.DictReader(f):
    print(i)

f.close()

(Par souci d'explication, la gestion des exceptions introduite ci-dessus est omise une fois.)

csv.DictReader () utilise la première ligne des données csv reçues comme clé Les données de la ligne suivante généreront un objet qui sera la valeur de cette clé.

Je veux extraire les objets générés ligne par ligne, alors utilisez l'instruction for et J'imprime. Si vous exécutez ce qui précède, vous obtiendrez les résultats suivants.

2.JPG

Au fait, si vous voulez lister le CSV chargé Utilisez ** csv.reader () ** pour obtenir une liste.

# -*- coding: utf-8 -*-
# !/usr/bin/env python
import csv

f = open("addresslist.csv", "r")

for i in csv.reader(f):
    print(i)

f.close()

Résultat d'exécution 3.JPG

Générer dans le format de données que vous souhaitez exporter

Cette fois, le CSV lu (addresslist.csv) est converti au format suivant. Exporter en tant que fichier CSV séparé (allcodelist.csv).


L'adresse et le numéro de téléphone sont des informations appropriées


addresslist.csv 6.JPG

allcodelist.csv 5.JPG

Créez une liste au format à exporter.

Préparez une liste vide (newcsv) et ajoutez des informations à la liste vide (newcsv).

newcsv = []
top_list = [
        'name',
        'zip code',
        'address',
        'phone',
        'mobile_pyone'
                ]
newcsv.append(top_list)

Tout d'abord, je mets la ligne d'article dans une variable appelée top_list et l'ajoute à la liste newcsv utilisée pour l'exportation. Pour ajouter une liste, écrivez ** le nom de la liste que vous souhaitez ajouter.append (objet à ajouter) **.

Maintenant que les éléments sont terminés, nous ajouterons plus d'informations. Générez les informations reçues par csv.DictReader () dans le format requis et ajoutez-les à la liste.

Il existe différentes manières de générer une chaîne de caractères, mais cette fois, nous allons introduire ** join **. ** Spécifiez le caractère à utiliser pour la connexion. Rejoindre (transmettre les informations que vous souhaitez connecter dans une liste) **

Qu'est-ce que ça veut dire ... 7.JPG

Vous pouvez voir que la chaîne de caractères de la liste spécifiée après la jointure est connectée avec-spécifié avant la jointure.

Il existe d'autres moyens de concaténer des chaînes de caractères, comme l'utilisation de format ou +, qui peuvent être plus courants, mais c'est [Janken Poi en Python pour les débutants (réponses et explications)](http: // qiita) Veuillez vous référer à la concaténation des chaînes de caractères de .com / sandream / items / 01374069f447b7748eba). Cette fois, je ne l'ai pas présenté sur la page ci-dessus, j'ai donc utilisé join.

Cette fois, nous allons connecter les informations de chaque élément, nous allons donc procéder comme suit.

for i in csv.DictReader(f):
    line = []
    line.append(" ".join((i['lastname'], i['firstname'])))
    line.append(":".join(("Code postal", i['zip code'])))
    line.append("".join((i['address1'], i['address2'], i['address3'])))
    line.append(":".join(("numéro de téléphone", i['phone'])))
    line.append(":".join(("Numéro de téléphone portable", i['mobilephone'])))
    newcsv.append(line)

Puisque je veux créer une liste pour une ligne une fois par minute, je vais créer une liste vide dans une variable appelée ligne et y mettre les informations pour chaque cellule. Lorsque j'ai terminé, je l'ai ajouté à la liste d'exportation (newcsv).

Exportez les données générées au format CSV

Tout d'abord, définissez le format de l'expression. ** csv.writer (objet fichier, délimiteur = délimiteur, fin de ligne = code de saut de ligne) ** Est utilisé.

Pour l'objet fichier, spécifiez ** open (nom du fichier CSV à exporter, méthode d'exportation **). Comme pour la méthode d'exportation, ** w ** sera écrasé et ** a ** sera ajouté.

** delimiter ** est une spécification de ce qu'il faut diviser. La valeur par défaut est la virgule. CSV est séparé par des virgules, il n'est donc pas spécifié cette fois.

** terminateur de ligne = code de saut de ligne) ** est le code de saut de ligne. Cette fois, spécifiez ** / n **.

writer = csv.writer(open("allcodelist.csv", "w"), lineterminator='\n')

Après avoir défini le format de l'expression, exportez-le.

writer.writerows(newcsv)

** writerows (objet à écrire) ** Cette fois, je mets les données que je veux écrire dans une variable appelée newcsv, donc Spécifiez newcsv dans () de writerows ().

** writerows ** écrit tous les objets spécifiés entre () avec le nom de fichier spécifié dans ** open (nom de fichier à écrire, méthode d'exportation **).

Voici le programme complet.

# -*- coding: utf-8 -*-
# !/usr/bin/env python
import sys
import csv

args = sys.argv
#Recevez le nom de fichier entré à l'invite de commande
try:
    filename = args[1]
except:
    sys.exit("No file Name!")

#Recevez le CSV correspondant en utilisant le nom de fichier reçu
try:
    filename = args[1]
    f = open(filename, 'r')
except IOError as e:
    sys.exit("Unable to open file: {}".format(e))

#Générer une ligne d'article CSV à exporter
newcsv = []
top_list = [
        'name',
        'zip code',
        'address',
        'phone',
        'mobile_pyone'
                ]
newcsv.append(top_list)
for i in csv.DictReader(f):
    line = []
    line.append(" ".join((i['lastname'], i['firstname'])))
    line.append(":".join(("Code postal", i['zip code'])))
    line.append("".join((i['address1'], i['address2'], i['address3'])))
    line.append(":".join(("numéro de téléphone", i['phone'])))
    line.append(":".join(("Numéro de téléphone portable", i['mobilephone'])))
    newcsv.append(line)

#Exporter les données générées
writer = csv.writer(open("allcodelist.csv", "w"), lineterminator='\n')
writer.writerows(newcsv)

f.close()

Cela fait longtemps, mais j'espère que vous le trouverez utile. La prochaine fois, sur la base de ce contenu, créez une classe, puis créez une classe qui hérite de la classe créée! Je voudrais passer à. (L'article est en cours de création. Il sera lié une fois terminé.)

Recommended Posts

Cours de base sur Python Traitement CSV (fonctions et classes n ° 1 CSV est lu et écrit)
Cours de base Python (13 cours)
Cours de base Python (1 Qu'est-ce que Python)
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
Cours de base Python (14 modules et packages)
Lire Python csv et exporter vers txt
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Lire JSON avec Python et générer un CSV
# Bases de Python (fonctions)
bases de python: fonctions
[Python] Lire le csv japonais avec des pandas sans caractères déformés (extraire davantage les colonnes écrites en japonais)
Traitement pleine largeur et demi-largeur des données CSV en Python
Installation de Python 3 sur Mac et vérification du fonctionnement de base Partie 1
Cours de base Python (7 dictionnaire)
Cours de base Python (9 itérations)
Cours de base Python (11 exceptions)
Cours de base Python (6 sets)
Cours de base Python (Introduction)
Mémorandum de base Python partie 2
Mémo de base Python - Partie 2
# 4 [python] Bases des fonctions
Lire le fichier csv Python
Mémo de base Python - Partie 1
Cours de base Python (8 branches)
Cours de base Python (3 Exécution de Python)
[Python] Lisez le fichier csv et affichez la figure avec matplotlib