NBA_01_Datenstrukturen_Formatierung_Werkzeuge¶
(c) 2026 Technische Hochschule Augsburg - Fakultät für Informatik - Prof.Dr.Nik Klever - Impressum
Formatierung¶
Textausgabe Formatierung¶
reprlib¶
In [1]:
import reprlib
reprlib.repr("Dies ist ein längerer Satz mit einer Anzahl von Wörtern")
Out[1]:
"'Dies ist ein...l von Wörtern'"
In [2]:
reprlib.repr(list("Dies ist ein längerer Satz mit einer Anzahl von Wörtern"))
Out[2]:
"['D', 'i', 'e', 's', ' ', 'i', ...]"
pprint¶
In [3]:
import pprint
t = {1: 'eins', 2:[1,2,3,4], 3:'drei', 4:['eins','zwei',[5,6,7,8]]}
pprint.pprint(t, width=30)
{1: 'eins',
2: [1, 2, 3, 4],
3: 'drei',
4: ['eins',
'zwei',
[5, 6, 7, 8]]}
In [4]:
print(t)
{1: 'eins', 2: [1, 2, 3, 4], 3: 'drei', 4: ['eins', 'zwei', [5, 6, 7, 8]]}
textwrap¶
In [5]:
import textwrap
doc = """Dies ist ein längerer Text, der auch aus
mehreren Zeilen und mehreren Sätzen besteht.
Hier noch ein zweiter Satz sowie ein Halbsatz.
Und noch ein dritter Satz."""
print(textwrap.fill(doc, width=30))
Dies ist ein längerer Text, der auch aus mehreren Zeilen und mehreren Sätzen besteht. Hier noch ein zweiter Satz sowie ein Halbsatz. Und noch ein dritter Satz.
In [6]:
print(doc)
Dies ist ein längerer Text, der auch aus mehreren Zeilen und mehreren Sätzen besteht. Hier noch ein zweiter Satz sowie ein Halbsatz. Und noch ein dritter Satz.
locale¶
In [7]:
import locale
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
x = 12345678.9
locale.format("%d", x, grouping=True)
Out[7]:
'12.345.678'
In [8]:
locale.format("%.2f", x, grouping=True)
Out[8]:
'12.345.678,90'
In [9]:
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
locale.format("%.2f", x, grouping=True)
Out[9]:
'12,345,678.90'
Binärdaten¶
struct¶
In [10]:
import struct
with open("Bsp.zip", "rb") as f:
data = f.read()
start = 0
for i in range(4):
fields = struct.unpack("<IHHHHHIIIHH", data[start:start+30])
keys = ["signature","version","flag","comp_method","last_mod_time","last_mod_date","crc32",
"comp_size","uncomp_size","filenamesize","extra_size"]
header = dict(zip(keys,fields))
start += 30
filename = str(data[start:start+header["filenamesize"]],encoding="UTF-8")
start += header["filenamesize"]
extra = data[start:start+header["extra_size"]]
print("{filename:32} - {comp_method:02x}, {last_mod_time:6}, {last_mod_date:6}, {crc32:08x}, {comp_size:6}, {uncomp_size:8}".format(filename=filename,**header))
start += header["extra_size"] + header["comp_size"]
Funktionale Programmierung.ipynb - 08, 39994, 19107, 492ab107, 1379, 7848 Generatoren.ipynb - 08, 38179, 19110, 02add7c8, 23147, 142548 Iteratoren.ipynb - 08, 41609, 19107, ddd01fe2, 1872, 15234 myfile.txt - 08, 41475, 19107, 2b3ae3d5, 67, 74
In [11]:
tag = 3
monat = 5
jahr = 2017
datum = (jahr-1980) << 9 | monat << 5 | tag
datum
Out[11]:
19107
In [12]:
tag = datum & 0b00011111
tag
Out[12]:
3
In [13]:
monat = (datum >> 5) & 0b00001111
monat
Out[13]:
5
In [14]:
jahr = ((datum >> 9) & 0b01111111) + 1980
jahr
Out[14]:
2017
In [15]:
sekunden = 52
minuten = 33
stunden = 19
uhrzeit = stunden << 11 | minuten << 5 | sekunden // 2
uhrzeit
Out[15]:
39994
In [16]:
sekunden = (uhrzeit & 0b00011111) * 2
sekunden
Out[16]:
52
In [17]:
minuten = (uhrzeit >> 5) & 0b00111111
minuten
Out[17]:
33
In [18]:
stunden = (uhrzeit >> 11) & 0b00011111
stunden
Out[18]:
19
In [19]:
import struct
with open("Bsp.zip", "rb") as f:
data = f.read()
start = 0
for i in range(4):
fields = struct.unpack("<IHHHHHIIIHH", data[start:start+30])
keys = ["signature","version","flag","comp_method","last_mod_time","last_mod_date","crc32",
"comp_size","uncomp_size","filenamesize","extra_size"]
header = dict(zip(keys,fields))
start += 30
filename = str(data[start:start+header["filenamesize"]],encoding="UTF-8")
start += header["filenamesize"]
extra = data[start:start+header["extra_size"]]
tag = header["last_mod_date"] & 0x1f
monat = (header["last_mod_date"] >> 5) & 0x0f
jahr = ((header["last_mod_date"] >> 9) & 0x7f) + 1980
sekunden = (header["last_mod_time"] & 0x1f) * 2
minuten = (header["last_mod_time"] >> 5) & 0x3f
stunden = (header["last_mod_time"] >> 11) & 0x1f
print("{filename:32} - {comp_method:02x}, {last_mod_time:6}, {last_mod_date:6}, {crc32:08x}, {comp_size:6}, {uncomp_size:8}, {jahr}-{monat:02}-{tag:02} {stunden:02}:{minuten:02}".format(filename=filename,tag=tag,monat=monat,jahr=jahr,minuten=minuten,stunden=stunden,**header))
start += header["extra_size"] + header["comp_size"]
Funktionale Programmierung.ipynb - 08, 39994, 19107, 492ab107, 1379, 7848, 2017-05-03 19:33 Generatoren.ipynb - 08, 38179, 19110, 02add7c8, 23147, 142548, 2017-05-06 18:41 Iteratoren.ipynb - 08, 41609, 19107, ddd01fe2, 1872, 15234, 2017-05-03 20:20 myfile.txt - 08, 41475, 19107, 2b3ae3d5, 67, 74, 2017-05-03 20:16
In [20]:
!unzip -v Bsp.zip
Archive: Bsp.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
7848 Defl:N 1379 82% 2017-05-03 19:33 492ab107 Funktionale Programmierung.ipynb
142548 Defl:N 23147 84% 2017-05-06 18:41 02add7c8 Generatoren.ipynb
15234 Defl:N 1872 88% 2017-05-03 20:20 ddd01fe2 Iteratoren.ipynb
74 Defl:N 67 10% 2017-05-03 20:16 2b3ae3d5 myfile.txt
-------- ------- --- -------
165704 26465 84% 4 files