Dieser Artikel ist für Anfänger in Python bei Django Girls Japan und elv, Dies ist ein Material für Lernsitzungen. Da der Autor auch Anfänger ist, entschuldigen wir uns für etwaige Unannehmlichkeiten.
Namensumgebung: Windows 10 python3.5
Diese Seite enthält die grundlegenden Schritte zum Lesen und Ausspucken von CSV in einem anderen Format Diese Seite erklärt Schritt für Schritt. Bevor wir eine Klasse erstellen, schreiben wir zunächst den Prozess von Anfang bis Ende.
Dieses Mal wird die gelesene CSV (addresslist.csv) in das folgende Format konvertiert. Export als separate CSV-Datei (allcodelist.csv).
Adresse und Telefonnummer sind entsprechende Informationen
addresslist.csv
allcodelist.csv
Zunächst die Vorbereitung. Erstellen Sie an jedem Ort einen neuen Ordner. In der Befehlszeile (Klicken Sie hier, um die Befehlszeile zu öffnen [http://qiita.com/sandream/items/a0f69e69b561192517a2) Wenn Sie den Speicherort erreicht haben, an dem Sie den Ordner erstellen möchten, geben Sie ** mkdir-Ordnername ** ein. Erstellen Sie dieses Mal einen Ordner mit dem Namen Adresse.
mkdir address
Schreiben Sie Folgendes in den Texteditor in den erstellten Ordner: Speichern Sie die Python-Datei.
# -*- coding: utf-8 -*-
#!/usr/bin/env python
Bitte fügen Sie die obigen Angaben am Anfang der Datei hinzu. (Die Erklärung des obigen Inhalts wird hier weggelassen.) Geben Sie der Datei einen Namen und speichern Sie sie mit der Erweiterung .py. (Der Zeichencode ist utf-8.) Es gibt verschiedene Texteditoren, aber der Autor verwendet ATOM.
Jetzt, da wir fertig sind, laden wir csv. ** Variable = offen (Pfad der Datei, die Sie lesen möchten, "r") ** Sie können die Dateidaten mit lesen.
# -*- coding: utf-8 -*-
# !/usr/bin/env python
f = open("addresslist.csv", "r")
print(f)
f.close()
Öffnen Sie die Datei mit Öffnen und schließen Sie die zuletzt geöffnete Datei. Ich drucke die Daten, die ich vor dem Schließen erhalten habe. Dieses Mal habe ich die CSV-Datei in den gleichen Ordner gelegt, also Es ist nur möglich, nach Dateinamen zu empfangen. (Wenn Sie eine Datei in einem anderen Ordner lesen möchten, geben Sie den Pfad ein.)
Wenn ich die Datei starte
Sie können sehen, dass Sie addresslist.csv erfolgreich erhalten haben.
Nun, es weicht ein wenig vom ursprünglichen Ablauf ab, aber bisher im Programm Der zu lesende Dateiname wurde als addresslist.csv festgelegt. In einigen Fällen möchten Sie jedoch möglicherweise eine andere Datei lesen.
Wir zeigen Ihnen, wie Sie den an der Eingabeaufforderung bei der Ausführung der Datei eingegebenen Dateinamen abrufen und verwenden.
** sys Modul ** Importieren.
# -*- coding: utf-8 -*-
# !/usr/bin/env python
import sys
args = sys.argv
print(args)
** sys.argv ** wird als Python-Dateiname eingegeben, wenn die Datei über die Eingabeaufforderung ausgeführt wird. Wenn Sie es eingeben, wird der Inhalt des nach dem Python-Dateinamen eingegebenen Texts, der durch ein Leerzeichen mit halber Breite getrennt ist, als Liste empfangen.
Wenn Sie die Datei mit dem obigen Code ausführen, ist dies wie folgt.
python allcode2.py "test" Wenn Sie ausführen, können Sie sehen, dass ** ['allcode2.py', 'test'] ** zurückgegeben wird. python allcode2.py "test" "DjangoGirls" "elv" Wenn du läufst Sie können sehen, dass ** ['allcode2.py', 'test', 'DjangoGirls', 'elv'] ** zurückgegeben wird. Beginnen Sie die Liste immer mit dem Namen der Python-Datei, die Sie ausführen.
Verwenden Sie diese Funktion, um den Namen der Datei abzurufen und zu öffnen.
# -*- 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)
Ich habe die Liste in sys.argv in eine Variable namens args eingefügt. Wie oben erläutert, ist das erste Element der Liste der Name der ausgeführten Datei. Holen Sie sich also das zweite Element der Liste. (Für die Liste klicken Sie hier](http://qiita.com/sandream/items/e7a215a27c080cf8ac03)) Rufen Sie den Namen der CSV-Datei ab, die Sie mit args [1] in der Variablen ** Dateiname ** lesen möchten.
Wenn der Benutzer die Datei ausführt und vergisst, den Dateinamen einzugeben, kann die Datei nicht geöffnet werden und das Programm schlägt fehl. Wenn Sie daher vergessen, den Dateinamen einzugeben, oder wenn Sie einen nicht vorhandenen Dateinamen angeben, beenden Sie das Programm und stellen Sie es so ein, dass ein leicht verständlicher Fehler angezeigt wird. try: ** Was willst du tun ** except: ** Die Verarbeitung, wenn das unter try versuchte Programm nicht wie gewünscht ausgeführt werden kann **
Dieses Mal werde ich zwei Fehlerbehandlungen einführen. (Eines Tages ... möchte ich verschiedene Artikel zur Fehlerbehandlung separat schreiben.)
Die erste ist die Verarbeitung, wenn der Benutzer vergisst, den Dateinamen einzugeben. Wenn Sie ** Dateiname = Argumente [1] ** angeben und der Benutzer keinen Dateinamen eingibt, tritt ein Fehler auf, da [1] in der Liste nicht vorhanden ist.
Wenn ein Fehler auftritt, möchte ich das Programm beenden und den Benutzer darüber informieren, dass der Dateiname nicht enthalten ist. Gehen Sie dazu wie folgt vor.
try:
filename = args[1]
except:
sys.exit("No file Name!")
Wenn Sie dies tun, führen Sie es aus, ohne den zu lesenden CSV-Dateinamen anzugeben Auf diese Weise werden die in () von sys.exit () angegebenen Zeichen angezeigt.
Wenn der Benutzer das nächste Mal einen Dateinamen eingibt und die Datei nicht vorhanden ist, enthält die Variable Dateiname den Dateinamen. Beim Öffnen mit ** f = open (Dateiname, 'r') ** tritt ein Fehler auf, da keine Datei vorhanden ist.
Daher wird es wie folgt beschrieben.
try:
filename = args[1]
f = open(filename, 'r')
except IOError as e:
sys.exit("Unable to open file: {}".format(e))
** IOE-Fehler ** tritt auf, wenn die Eingabe oder Ausgabe fehlschlägt. Beispielsweise tritt ein Fehler auf, der auftritt, wenn die Festplatte voll ist oder die Eingabedatei nicht vorhanden ist. ** IOError as e ** bedeutet, dass beim Auftreten einer Ausnahme das Objekt, das diese Informationen enthält, als "e" festgelegt und die darin enthaltene Verarbeitung (in diesem Fall werden nur die Informationen angezeigt) ausgeführt wird. Dieses Mal wollte ich eine Fehlermeldung anzeigen, also habe ich sie eingestellt. Wenn Sie den Fehlerwert nicht verwenden möchten, müssen Sie ihn nicht schreiben.
Wenn Sie einen geeigneten Dateinamen angeben und ausführen, Es wird sein. Nach Datei kann nicht geöffnet werden: ist die IOError-Fehlermeldung (der mit e gekennzeichnete Teil).
Wenn in diesem Programm die beiden oben genannten Fehler auftreten, wird das Programm auch dann beendet, wenn keine Ausnahmeverarbeitung durchgeführt wird. Wenn Sie beispielsweise viele Programme schreiben, möchte ich, dass Sie diesen Prozess ausführen können, aber wenn Sie dies nicht können, ist das in Ordnung. Manchmal try: ** Was willst du tun ** except: pass Auf diese Weise können Sie nichts tun, wenn ein Fehler auftritt. Ich denke, es ist gut, sich zu erinnern.
Wenn Sie eine Fehlermeldung erhalten, erstellen Sie eine Liste und schreiben Sie sie am Ende in den Text. Sie können überprüfen, was nach Abschluss des Programms schief gelaufen ist, und sie wiederherstellen, was praktisch ist. ..
Geben Sie diesmal die empfangenen Daten in die erste Zeile ein. In der zweiten und den folgenden Zeilen wird ein Wörterbuch erstellt, das den Wert für jeden Schlüssel darstellt.
Verwenden Sie daher das CSV-Modul. Importieren Sie zunächst das Modul mit ** 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()
(Zur Erläuterung wird die oben eingeführte Ausnahmebehandlung einmal weggelassen.)
csv.DictReader () verwendet die erste Zeile der empfangenen CSV-Daten als Schlüssel Die Daten aus der nächsten Zeile generieren ein Objekt, das den Wert dieses Schlüssels darstellt.
Ich möchte die generierten Objekte Zeile für Zeile extrahieren, verwenden Sie also die for-Anweisung und Ich drucke. Wenn Sie die obigen Schritte ausführen, erhalten Sie die folgenden Ergebnisse.
Übrigens, wenn Sie die geladene CSV auflisten möchten Verwenden Sie ** csv.reader () **, um eine Liste zu erhalten.
# -*- coding: utf-8 -*-
# !/usr/bin/env python
import csv
f = open("addresslist.csv", "r")
for i in csv.reader(f):
print(i)
f.close()
Ausführungsergebnis
Dieses Mal wird die gelesene CSV (addresslist.csv) in das folgende Format konvertiert. Export als separate CSV-Datei (allcodelist.csv).
Adresse und Telefonnummer sind entsprechende Informationen
addresslist.csv
allcodelist.csv
Bereiten Sie eine leere Liste (newcsv) vor und fügen Sie der leeren Liste (newcsv) Informationen hinzu.
newcsv = []
top_list = [
'name',
'zip code',
'address',
'phone',
'mobile_pyone'
]
newcsv.append(top_list)
Zuerst füge ich die Artikelzeile in eine Variable namens top_list ein und füge sie der Liste newcsv hinzu, die für den Export verwendet wird. Um eine Liste hinzuzufügen, schreiben Sie ** den Listennamen, den Sie hinzufügen möchten. Append (Objekt zum Hinzufügen) **.
Nachdem die Elemente vollständig sind, werden wir weitere Informationen hinzufügen. Generieren Sie die von csv.DictReader () empfangenen Informationen im erforderlichen Format und fügen Sie sie der Liste hinzu.
Es gibt verschiedene Möglichkeiten, eine Zeichenkette zu generieren, aber dieses Mal werden wir ** join ** einführen. ** Geben Sie die Zeichen an, die für die Verbindung verwendet werden sollen. Verbinden (übergeben Sie die Informationen, die Sie verbinden möchten, in einer Liste) **
Was bedeutet das ...
Sie können sehen, dass die Zeichenfolge der nach dem Join angegebenen Liste mit dem vor dem Join angegebenen Wert verbunden ist.
Es gibt andere Möglichkeiten, Zeichenfolgen zu verketten, z. B. Format oder +, was möglicherweise häufiger vorkommt. Es handelt sich jedoch um [Janken Poi in Python für Anfänger (Antworten und Erklärungen)](http: // qiita). Bitte beachten Sie die Verkettung der Zeichenketten von .com / sandream / items / 01374069f447b7748eba). Dieses Mal habe ich es auf der obigen Seite nicht vorgestellt, also habe ich join verwendet.
Dieses Mal verbinden wir die Informationen der einzelnen Elemente und gehen wie folgt vor.
for i in csv.DictReader(f):
line = []
line.append(" ".join((i['lastname'], i['firstname'])))
line.append(":".join(("Postleitzahl", i['zip code'])))
line.append("".join((i['address1'], i['address2'], i['address3'])))
line.append(":".join(("Telefonnummer", i['phone'])))
line.append(":".join(("Handynummer", i['mobilephone'])))
newcsv.append(line)
Da ich einmal in den Minuten eine Liste für eine Zeile erstellen möchte, generiere ich eine leere Liste in einer Variablen namens Zeile und füge die Informationen für jede Zelle darin ein. Wenn es fertig ist, habe ich es der Exportliste (newcsv) hinzugefügt.
Legen Sie zunächst das Ausdrucksformat fest. ** csv.writer (Dateiobjekt, Trennzeichen = Trennzeichen, Zeilenabschluss = Zeilenvorschubcode) ** Wird genutzt.
Geben Sie für das Dateiobjekt ** open an (zu exportierender CSV-Dateiname, Exportmethode **). Bei der Exportmethode wird ** w ** überschrieben und ** a ** hinzugefügt.
** Trennzeichen ** ist eine Angabe, was geteilt werden soll. Der Standardwert ist Komma. CSV wird durch Kommas getrennt, daher wird es diesmal nicht angegeben.
** Zeilenabschluss = Zeilenvorschubcode) ** ist der Zeilenvorschubcode. Geben Sie diesmal ** / n ** an.
writer = csv.writer(open("allcodelist.csv", "w"), lineterminator='\n')
Exportieren Sie das Ausdrucksformat, nachdem Sie es festgelegt haben.
writer.writerows(newcsv)
** writerows (zu schreibendes Objekt) ** Dieses Mal habe ich die Daten, die ich schreiben möchte, in eine Variable namens newcsv eingefügt Geben Sie newcsv in () von writerows () an.
** writerows ** schreibt alle in () angegebenen Objekte mit dem in ** open angegebenen Dateinamen (zu schreibender Dateiname, Exportmethode **).
# -*- coding: utf-8 -*-
# !/usr/bin/env python
import sys
import csv
args = sys.argv
#Erhalten Sie den an der Eingabeaufforderung eingegebenen Dateinamen
try:
filename = args[1]
except:
sys.exit("No file Name!")
#Empfangen Sie die entsprechende CSV unter Verwendung des empfangenen Dateinamens
try:
filename = args[1]
f = open(filename, 'r')
except IOError as e:
sys.exit("Unable to open file: {}".format(e))
#Generieren Sie die zu exportierende CSV-Artikelzeile
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(("Postleitzahl", i['zip code'])))
line.append("".join((i['address1'], i['address2'], i['address3'])))
line.append(":".join(("Telefonnummer", i['phone'])))
line.append(":".join(("Handynummer", i['mobilephone'])))
newcsv.append(line)
#Generierte Daten exportieren
writer = csv.writer(open("allcodelist.csv", "w"), lineterminator='\n')
writer.writerows(newcsv)
f.close()
Es ist lange her, aber ich hoffe, Sie finden es hilfreich. Erstellen Sie beim nächsten Mal basierend auf diesem Inhalt eine Klasse und anschließend eine Klasse, die die erstellte Klasse erbt! Ich würde gerne fortfahren. (Der Artikel wird gerade erstellt. Er wird nach Fertigstellung verlinkt.)
Recommended Posts