[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)

8.1 Dateieingabe / -ausgabe

--Öffnen Sie die Datei mit fileobj = open (Dateiname, Modus). --fileobj ist das Objekt der Datei, die von open () zurückgegeben wird. --Dateiname ist der Dateiname --Wählen Sie, was Sie mit der Datei machen möchten. --r wird gelesen, w wird geschrieben und kann überschrieben und neu erstellt werden, x wird geschrieben, aber nur, wenn die Datei nicht vorhanden ist. Das zweite Zeichen von --mode gibt den Dateityp an. t bedeutet Text und b bedeutet Binär.

8.1.1 Schreiben in eine Textdatei mit write ()


>>> poem = """There was a young lady named Bright,
... Whose speed was far faster than light,
... She started one day,
... In a relative way,
... And returned on the previous night."""
>>> len(poem)
151

#write()Die Funktion gibt die Anzahl der geschriebenen Bytes zurück.
>>> f=open("relatibity","wt")
>>> f.write(poem)
151
>>> f.close()

#print()Sie können jedoch in eine Textdatei schreiben.
#print()Fügt nach jedem Argument ein Leerzeichen und am Ende des Ganzen einen Zeilenumbruch hinzu.
>>> f=open("relatibity","wt")
>>> print(poem,file=f)
>>> f.close()

#print()Schreiben()So arbeiten wie sep,Verwenden Sie end.
#sep:Separator. Standardmäßig Leerzeichen(" ")werden.
#end:Die letzte Zeichenfolge. Pausen werden standardmäßig unterbrochen("\n")werden.
>>> f=open("relatibity","wt")
>>> print(poem,file=f,sep="",end="")
>>> f.close()

#Wenn die Quellzeichenfolge sehr groß ist, kann sie in Blöcke aufgeteilt und in die Datei geschrieben werden.
>>> f=open("relatibity","wt")
>>> size=len(poem)
>>> offset=0
>>> chunk=100
>>> while True:
...     if offset>size:
...         break
...     f.write(poem[offset:offset+chunk])
...     offset+=chunk
... 
100
51
>>> f.close()

#Eine Dateibeschädigung kann verhindert werden, indem ein Überschreiben im x-Modus verhindert wird.
>>> f=open("relatibity","xt")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'relatibity'

#Es kann auch als Ausnahmebehandlungsroutine verwendet werden.
>>> try:
...     f=open("relatibity","xt")
...     f.write("stomp stomp stomp")
... except FileExistsError:
...     print("relativity already exists!. That was a close one.")
... 
relativity already exists!. That was a close one.


8.1.2 Lesen von Textdateien mit read (), readline (), headlines ()


#Die gesamte Datei kann auf einmal gelesen werden.
>>> fin=open("relatibity","rt")
>>> poem=fin.read()
>>> fin.close()
>>> len(poem)
151

#read()Sie können die Menge der gleichzeitig zurückgegebenen Daten begrenzen, indem Sie die Anzahl der Zeichen in das Argument von eingeben.
#Lesen Sie mehr, nachdem Sie alle Dateien gelesen haben()Wenn Sie aufrufen, eine leere Zeichenfolge("")Ist zurück gekommen. → wenn nicht f:Wird als falsch bewertet.
>>> poem=""
>>> fin=open("relatibity","rt")
>>> chunk=100
>>> while True:
...     f=fin.read(chunk)
...     if not f:
...         break
...     poem+=f
... 
>>> fin.close()
>>> len(poem)
151

#readline()Sie können die Datei zeilenweise lesen.
#Lesen Sie alle Dateien()Ebenso wird eine leere Zeichenfolge zurückgegeben und als False ausgewertet.
>>> poem=""
>>> fin=open("relatibity","rt")
>>> while True:
...     line=fin.readline()
...     if not line:
...         break
...     poem+=line
... 
>>> fin.close()
>>> len(poem)
151

#Es kann leicht gelesen werden, indem es mit einem Iterator verwendet wird.
>>> poem=""
>>> fin=open("relatibity","rt")
>>> for line in fin:
...     poem+=line
... 
>>> fin.close()
>>> len(poem)
151

#readlines()Liest jeweils eine Zeile und gibt eine Liste einzeiliger Zeichenfolgen zurück.
>>> fin=open("relativity","rt")
>>> lines=fin.readlines()
>>> fin.close()
>>> for line in lines:
...      print(line,end="")
... 
There was a young lady named Bright,
Whose speed was far faster than light,
She started one day,
In a relative way,
And returned on the previous night.>>> 

8.1.3 Schreiben einer Binärdatei mit write ()


#Lassen Sie uns 256 Bytes von 0 bis 255 generieren.
>>> bdata=bytes(range(0,256))
>>> len(bdata)
256
>>> f=open("bfile","wb")
>>> f.write(bdata)
256
>>> f.close()

#Es ist auch möglich, in Blockeinheiten zu schreiben, wie im Fall von Text.
>>> f=open("bfile","wb")
>>> size=len(bdata)
>>> offset=0
>>> chunk=100
>>> while True:
...     if offset>size:
...         break
...     f.write(bdata[offset:offset+chunk])
...     offset+=chunk
... 
100
100
56
>>> f.close

8.1.4 Binärdatei mit read () lesen


#"rb"Öffnen Sie es einfach als.
>>> f=open("bfile","rb")
>>> bdata=f.read()
>>> len(bdata)
256
>>> f.close()

8.1.5 mit automatischem Schließen von Dateien

--with Wenn der folgende Kontextblock endet, wird die Datei automatisch geschlossen. --Verwenden Sie in Form eines Ausdrucks als Variable.


>>> with open("relatibity","wt") as f:
...     f.write(poem)
... 
151

8.1.6 Neupositionierung mit seek ()


>>> f=open("bfile","rb")
>>> f.tell()
0

#seek()Verwenden Sie diese Option, um zum letzten Byte der Datei zu wechseln.
#Ort(255)Ich ging zu und las von dort die Rückseite. → Das letzte 1 Byte wurde gelesen.
#Ein Bild, das sich zwischen 254 und 255 befindet und beim letzten Laden 255 geladen hat.
>>> f.seek(255)
255
>>> b=f.read()
>>> len(b)
1
#seek()Gibt auch den Versatz nach dem Verschieben zurück.
>>> b[0]
255


>>> import os
>>> os.SEEK_SET
0
>>> os.SEEK_CUR
1
>>> os.SEEK_END
2


>>> f=open("bfile","rb")
#Vom Ende-In eine um 1 versetzte Position verschoben.
>>> f.seek(-1,2)
255
#Gibt den Offset in Bytes vom Anfang der Datei zurück.
>>> f.tell()
255
>>> b=f.read()
>>> len(b)
1
>>> b[0]
255

#Verschieben Sie vom Anfang der Datei zu den letzten 2 Bytes
#Bild zwischen 253 und 254
>>> f=open("bfile","rb")
>>> f.seek(254,0)
254
>>> f.tell()
254
#Verschieben Sie von 2 Byte vor dem Ende der Datei auf 1 Byte vor
#Bild zwischen 254 und 255
>>> f.seek(1,1)
255
>>> f.tell()
255
>>> b=f.read()
>>> len(b)
1
>>> b[0]
255

8.2 Strukturierte Textdatei

CSV

--Die durch Trennzeichen in Felder getrennten Dateien werden als Datenaustauschformat für Tabellenkalkulationen und Datenbanken verwendet.


>>> import csv
>>> villains=[
...     ["Doctor","No"],
...     ["R","K"],
...     ["Mister","Big"],
...     ["Auric","Goldfinger"],
...     ["E","B"],
...     ]

>>> with open ("villains","wt") as fout:
#writer()Schreibe mit
...     csvout=csv.writer(fout)
#Eine CSV-Datei namens Bösewichte wurde erstellt.
...     csvout.writerows(villains)

Ausführungsergebnis



Docter,No
R,K
Miser,Big
Auric,Goldfinger
E,B


>> import csv
>>> with open("villains","rt") as fin:
#reader()Lesen Sie mit
...     cin=csv.reader(fin)
...     villains=[row for row in cin]
... 
>>> print(villains)
[['Doctor', 'No'], ['R', 'K'], ['Mister', 'Big'], ['Auric', 'Goldfinger'], ['E', 'B']]



#DictReader()Geben Sie den Spaltennamen mit an.
>>> import csv
>>> with open("villains","rt") as fin:
...     cin=csv.DictReader(fin,fieldnames=["first","last"])
...     villains=[row for row in cin]
... 
>>> print(villains)
[{'first': 'Docter', 'last': 'No'}, {'first': 'R', 'last': 'K'}, {'first': 'Miser', 'last': 'Big'}, {'first': 'Auric', 'last': 'Goldfinger'}, {'first': 'E', 'last': 'B'}]


>>> import csv
>>> villains= [
...     {"first":"Docter","last":"No"},
...     {"first":"R","last":"K"},
...     {"first":"Miser","last":"Big"},
...     {"first":"Auric","last":"Goldfinger"},
...     {"first":"E","last":"B"},
...     ]
>>> with open("villains","wt") as fout:
...     cout=csv.DictWriter(fout,["first","last"])
#writeheader()Sie können den Spaltennamen auch am Anfang der CSV-Datei mit schreiben.
...     cout.writeheader()
...     cout.writerows(villains)
... 

Ausführungsergebnis



first,last
Docter,No
R,K
Miser,Big
Auric,Goldfinger
E,B


#Lesen Sie die Daten aus der Datei erneut.
#DictReader()Wenn Sie das Argument fieldnames im Aufruf weglassen, wird der Wert in der ersten Zeile der Datei angezeigt(first,last)Mittel, die als Wörterbuchschlüssel für Spaltenbeschriftungen verwendet werden können.
>>> import csv
>>> with open("villains","rt") as fin:
...     cin=csv.DictReader(fin)
...     villains=[row for row in cin]
... 
>>> print(villains)
[OrderedDict([('first', 'Docter'), ('last', 'No')]), OrderedDict([('first', 'R'), ('last', 'K')]), OrderedDict([('first', 'Miser'), ('last', 'Big')]), OrderedDict([('first', 'Auric'), ('last', 'Goldfinger')]), OrderedDict([('first', 'E'), ('last', 'B')])]


8.2.2 XML

menu.xml



<?xml version="1.0"?>
<menu>
#Optionale Attribute können in das Start-Tag eingebettet werden.
    <breakfast hours="7-11">
        <item price="$6.00">breakfast burritos</item>
        <item price="$4.00">pancakes</item>
    </breakfast>
    <lunch hours="11-3">
        <item price="$5.00">hamburger</item>
    </lunch>
    <dinner hours="3-10">
        <item price="$8.00">spaghetti</item>
    </dinner>
</menu>


>>> import xml.etree.ElementTree as et
>>> tree=et.ElementTree(file="menu.xml")
>>> root=tree.getroot()
>>> root.tag
'menu'
#tag ist eine Folge von Tags und attrib ist ein Wörterbuch seiner Attribute.
>>> for child in root:
...     print("tag:",child.tag,"attributes:",child.attrib)
...     for grandchild in child:
...         print("\ttag:",grandchild.tag,"attributes:",grandchild.attrib)
... 
tag: breakfast attributes: {'hours': '7-11'}
	tag: item attributes: {'price': '$6.00'}
	tag: item attributes: {'price': '$4.00'}
tag: lunch attributes: {'hours': '11-3'}
	tag: item attributes: {'price': '$5.00'}
tag: dinner attributes: {'hours': '3-10'}
	tag: item attributes: {'price': '$8.00'}
#Anzahl der Menübereiche
>>> len(root)
3
#Anzahl der Frühstücksartikel
>>> len(root[0])
2

8.2.3 JSON


#Datenstruktur erstellen
>>> menu=\
... {
... "breakfast":{
...     "hours":"7-11",
...     "items":{
...             "breakfast burritos":"$6.00",
...             "pancakes":"$4.00"
...             }
...         },
... "lunch":{
...         "hours":"11-3",
...         "items":{
...             "hamburger":"$5.00"
...                 }
...         },
... "dinner":{
...     "hours":"3-10",
...     "items":{
...             "spaghetti":"$8.00"
...             }
...     }
... }

#dumps()Diese Datenstruktur mit(menu)Zu JSON-Zeichenfolge(menu_json)Codieren Sie zu.
>>> import json
>>> menu_json=json.dumps(menu)
>>> menu_json
`{"breakfast": {"hours": "7-11", "items": {"breakfast burritos": "$6.00", "pancakes": "$4.00"}}, "lunch": {"hours": "11-3", "items": {"hamburger": "$5.00"}}, "dinner": {"hours": "3-10", "items": {"spaghetti": "$8.00"}}}`

#loads()Verwenden des JSON-Zeichenfolgenmenüs_Kehren Sie json zum Python-Datenstrukturmenü2 zurück.
>>> menu2=json.loads(menu_json)
>>> menu2
{'breakfast': {'hours': '7-11', 'items': {'breakfast burritos': '$6.00', 'pancakes': '$4.00'}}, 'lunch': {'hours': '11-3', 'items': {'hamburger': '$5.00'}}, 'dinner': {'hours': '3-10', 'items': {'spaghetti': '$8.00'}}}

#Beim Versuch, einige Objekte wie datetime zu codieren oder zu decodieren, tritt die folgende Ausnahme auf.
#Dies liegt daran, dass der JSON-Standard keine Datums- und Uhrzeittypen definiert.
>>> import datetime
>>> now=datetime.datetime.utcnow()
>>> now
datetime.datetime(2020, 1, 23, 1, 59, 51, 106364)
>>> json.dumps(now)
#...Kürzung
TypeError: Object of type datetime is not JSON serializable

#Sie können datetime in eine Zeichenfolge oder Unix-Zeit konvertieren.
>>> now_str=str(now)
>>> json.dumps(now_str)
'"2020-01-23 01:59:51.106364"'
>>> from time import mktime
>>> now_epoch=int(mktime(now.timetuple()))
>>> json.dumps(now_epoch)
'1579712391'

#Wenn der normalerweise konvertierte Datentyp einen Wert für den Datums- / Uhrzeittyp enthält, ist die Konvertierung jedes Mal mühsam.
#Also json.Erstellen Sie eine Klasse, die JSONEncoder erbt.
#Überschreiben Sie die Standardmethode.
#isinstance()Die Funktion ist obj ist datetime.Überprüfen Sie, ob es sich um ein Objekt der Datetime-Klasse handelt.
>>> class DTEncoder(json.JSONEncoder):
...     def default(self,obj):
...     #isinstance()Überprüft die Art des Objekts.
...         if isinstance(obj,datetime.datetime):
...             return int(mktime(obj.timetuple()))
...         return json.JSONEncoder.default(self,obj)
... 
#now=datetime.datetime.utcnow()Ist definiert, wird True zurückgegeben.
>>> json.dumps(now,cls=DTEncoder)
`1579712391`

>>> type(now)
<class `datetime.datetime`>
>>> isinstance(now,datetime.datetime)
True
>>> type(234)
<class `int`>
>>> type("hey")
<class `str`>
>>> isinstance("hey",str)
True
>>> isinstance(234,int)
True

8.2.4 YAML

mcintyre.yaml



name:
  first:James
  last:McIntyre
dates:
  birth:1828-05-25
  death:1906-03-31
details:
  bearded:true
  themes:[cheese,Canada]
books:
  url:http://www.gutenberg.org/files/36068/36068-h/36068-h.htm
poems:
  - title: "Motto" #Ein Fehler ist aufgetreten, weil kein Platz mit halber Breite vorhanden war.
    text: |
        Politeness,perseverance and pluck,
        To their possessor will bring good luck.
  - title: "Canadian Charms" #Ein Fehler ist aufgetreten, weil kein Platz mit halber Breite vorhanden war.
    text: |
        Here industry is not in vain,
        For we have bounteous crops of grain,
        And you behold on every field
        Of grass and roots abundant yield,
        But after all the greatest charm
        Is the snug home upon the farm,
        And stone walls now keep cattle warm.


>>> import yaml
>>> with open("mcintyre.yaml","rt") as fin:
...     text=fin.read()
... 
>>> data=yaml.load(text)
>>> data["details"]
'bearded:true themes:[cheese,Canada]'
>>> len(data["poems"])
2


8.2.5 Serialisierung mit Gurke

--Python ist ein spezielles Binärformat, das ein Pickle-Modul bereitstellt, mit dem jedes Objekt gespeichert und wiederhergestellt werden kann.


>>> import pickle
>>> import datetime
>>> now1=datetime.datetime.utcnow()
>>> pickled=pickle.dumps(now1)
>>> now2=pickle.loads(pickled)
>>> now1
datetime.datetime(2020, 1, 23, 5, 30, 56, 648873)
>>> now2
datetime.datetime(2020, 1, 23, 5, 30, 56, 648873)

#pickle kann auch proprietäre Klassen und Objekte verarbeiten, die im Programm definiert sind.
>>> import pickle
>>> class Tiny():
...     def __str__(self):
...         return "tiny"
... 
>>> obj1=Tiny()
>>> obj1
<__main__.Tiny object at 0x10af86910>
>>> str(obj1)
'tiny'
#pickled ist eine binäre Sequenz, die mit pickle von einem obj1-Objekt serialisiert wurde.
#dump()Serialisieren Sie in eine Datei mit.
>>> pickled=pickle.dumps(obj1)
>>> pickled
b'\x80\x03c__main__\nTiny\nq\x00)\x81q\x01.'
#Ich habe es wieder in obj2 konvertiert und eine Kopie von obj1 erstellt.
#loads()Deserialisieren Sie Objekte aus Dateien mit.
>>> obj2=pickle.loads(pickled)
>>> obj2
<__main__.Tiny object at 0x10b21cdd0>
>>> str(obj2)
'tiny'


Impressionen

Endlich neben RDBMS.

Verweise

"Einführung in Python3 von Bill Lubanovic (veröffentlicht von O'Reilly Japan)"

"Python Tutorial 3.8.1 Dokument 7. Eingabe und Ausgabe" https://docs.python.org/ja/3/tutorial/inputoutput.html#old-string-formatting

Recommended Posts

[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
[Einführung in Python3 Tag 13] Kapitel 7 Zeichenfolgen (7.1-7.1.1.1)
[Einführung in Python3 Tag 14] Kapitel 7 Zeichenfolgen (7.1.1.1 bis 7.1.1.4)
[Einführung in Python3 Tag 15] Kapitel 7 Zeichenfolgen (7.1.2-7.1.2.2)
[Einführung in Python3 Tag 21] Kapitel 10 System (10.1 bis 10.5)
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
[Einführung in Python3, Tag 22] Kapitel 11 Parallele Verarbeitung und Vernetzung (11.1 bis 11.3)
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
[Einführung in Python3, Tag 23] Kapitel 12 Werden Sie Paisonista (12.1 bis 12.6)
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
[Einführung in Python3 Tag 8] Kapitel 4 Py Skin: Codestruktur (4.1-4.13)
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
[Einführung in Python3 Tag 1] Programmierung und Python
[Einführung in Python3 Tag 3] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.2 bis 2.3.6)
[Einführung in Python3 Tag 2] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.1)
[Einführung in Python3 Tag 4] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.3.7 bis 2.4)
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
[Einführung in Data Scientist] Grundlagen von Python ♬
[Einführung in Python3 Tag 7] Kapitel 3 Py Tools: Listen, Taples, Wörterbücher, Mengen (3.3-3.8)
[Einführung in Python3 Tag 5] Kapitel 3 Py Tools: Listen, Taples, Wörterbücher, Sets (3.1-3.2.6)
[Einführung in Python3 Tag 10] Kapitel 5 Py's Cosmetic Box: Module, Pakete, Programme (5.4-5.7)
[Einführung in Python3 Tag 9] Kapitel 5 Py's Cosmetic Box: Module, Pakete, Programme (5.1-5.4)
[Einführung in Python3 Tag 6] Kapitel 3 Py-Tool-Liste, Tapple, Wörterbuch, Set (3.2.7-3.2.19)
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
[Einführung in Python] Umgang mit Daten im JSON-Format
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Python für die Datenanalyse Kapitel 4
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Lesehinweis: Einführung in die Datenanalyse mit Python
Einführung in die serielle Kommunikation [Python]
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Python für die Datenanalyse Kapitel 2
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
Einführung in Python For, While
Python für die Datenanalyse Kapitel 3
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
[Einführung in Python] Kombinieren Sie Nikkei-Durchschnitts- und NY Dow-CSV-Daten
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
[Einführung in die Udemy Python3 + -Anwendung] 31. Kommentar
[Python] Wie man MP3-Daten fFT
Data Scientist Training Course Kapitel 2 Tag 2
Einführung in die Python Numerical Calculation Library NumPy
Trainieren! !! Einführung in Python Type (Type Hints)
Data Scientist Training Course Kapitel 3 Tag 3
[Einführung in Python] <numpy ndarray> [edit: 2020/02/22]
Data Scientist Training Course Kapitel 4 Tag 1
[Einführung in die Udemy Python3 + -Anwendung] 57. Decorator
Einführung in Python Hands On Teil 1