NBA_01_Datenstrukturen_Formatierung_Werkzeuge

(c) 2020/2021 Hochschule Augsburg - Fakultät für Informatik - Prof.Dr.Nik Klever

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