Eins vorweg, strings sind im Python imutable, also nicht veränderbar.
Folgendes geht nicht:
Code: Alles auswählen
s = 'Hwllo World'
s[1] = 'e' # TypeError: 'str' object does not support item assignment
Da findest du alle Antworten zur built-in print funtion:
https://docs.python.org/3/library/functions.html#print
Mit sep kannst du den Seperator festlegen, der standardmäßig ein Leerzeichen ist.
Andererseits gibt viele viele Möglichkeiten Strings zu interpretieren/formatieren.
Code: Alles auswählen
vname = 'Andre'
fname = 'Müller'
# kann man machen, in vielen Fällen ist es entgegen der Aussage vieler schneller, notfalls nachmessen
full_name = vname + ' ' + fname
# sieht hässlich aus, oftmals nimmt man diese Methode um aus liste, tuple bzw. Sequenzen einen String zu erstellen
full_name = ' '.join([vname, fname])
#string formatting
full_name = '%s %s' % (vname, fname) # String-Formatierung in C-Style, ungern gesehen. Ist alt
# Format Methode, wird bevorzugt eingesetzt. Die Indexierung kann man aus Kompatibilitätsgründen verwenden.
full_name = '{0} {1}'.format(vname, fname)
full_name = '{} {}'.format(vname, fname)
# das erste Feld ist 30 Zeichen lang und der eingesetzte Text ist linksbündig
full_name = '{:<30}{}'.format(vname, fname)
# jetzt nochmal mit einem dict und der format_map methode, ziemlich cool
person = {'vname': 'Andre', 'fname': 'Müller'}
full_name = '{vname} {fname}'.format_map(person)
# seit Python 3.6 der format string, der lokale Variablen einsetzt und sogar Methoden zulässt
full_name = f'{vname} {fname}'
# hier wird die Methode upper beide Strings angewandt. Namen von Sklaven hat man früher groß geschieben.
full_name = f'{vname.upper()} {fname.upper()}'
# string.Template, nutzt kaum jemand
import string
tpl = string.Template('$vname $fname')
full_name = tpl.safe_substitute(vname=vname, fname=fname)
Das müssten so alle Möglichkeiten gewesen sein. Zur format Methode unbedingt das hier lesen:
https://docs.python.org/3/library/strin ... matstrings
Das gilt auch für format-strings in Python 3.6.
Seit Python 3.x sind alle strings Unicode. Die interne Repräsentation hängt von der Python-Version ab.
Dann gibt es noch bytes, die explizit die binäre Repräsentation des Speichers darstellen.
Hat man z.B. eine Datei im binären Modus geöffnet, müssen das zu schreibende Objekt auch explizit bytes sein.
Eine implizite Konvertierung von str zu bytes gibt es seit Python 3 zum Glück nicht mehr.
str > bytes: encode > utf-8 Standardmäßig
bytes > str: decode < utf-8 Standardmäßig
Bytestrings werden mit im Programmcode mit einem b Präfix gekennzeichnet.
b'Andre M\xfcller' # codiert mit latin1
b'Andre M\xc3\xbcller' # codiert mit utf-8
Wie schon ersichtlich, werden Zeichen, die nicht durch ASCII dargestellt werden können, als \xHEX dargestellt.
Es lassen sich Zeichen so auch im Programmcode explizit eingeben. Gültig ist in bytestrings \x00 - \xFF.
In Strings lässt sich das auch verwenden. Für 2 byte unicode \u3ccc und für 4 byte unicode \U
Dazu am besten die Dokumentation über Unicode lesen:
https://docs.python.org/3/howto/unicode.html
Manchmal kann das etwas verwirrend sein.
Übrigens kannst du auch im Programmcode Variablennamen in Unicode angeben um andere zu ärgern.
Öffnet man Dateien, so werden diese Standardmäßig im Text-Mode geöffnet und das encoding ist utf-8.
Öffnet man Dateien im Raw-Mode, so müssen auch explizit bytes geschrieben werden. Darüber wirst du sicherlich noch öfters stolpern.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server