Latest web development tutorials

Python3 Eingangs- und Ausgangs

In den ersten Kapiteln haben wir eigentlich Python Ein- und Ausgabefunktion berührt. In diesem Kapitel werden wir Python spezifische Ein- und Ausgabe einzuführen.


Ausgabeformat verschönern

Python Weise zwei Ausgangswerte: Ausdrucksanweisungen und die Funktion print ().

Die dritte Möglichkeit ist die Datei-Objekts Methode write () zu verwenden, kann die Standardausgabedatei sys.stdout Referenz verwendet werden.

Wenn Sie in Form vielfältiger ausgeben möchten, können Sie str.format () Funktion zur Formatierung des Ausgangswerts verwenden.

Wenn Sie in einen String-Wert des Ausgangs aktivieren möchten, können Sie die repr () oder str () Funktion zu erreichen verwenden.

  • str (): Funktion gibt einen Benutzer lesbare Form des Ausdrucks.
  • repr (): erzeugt eine Form des Ausdrucks Interpreter lesbar.

Z.B.

>>> s = 'Hello, w3big'
>>> str(s)
'Hello, w3big'
>>> repr(s)
"'Hello, w3big'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'x 的值为: ' + repr(x) + ',  y 的值为:' + repr(y) + '...'
>>> print(s)
x 的值为: 32.5,  y 的值为:40000...
>>> #  repr() 函数可以转义字符串中的特殊字符
... hello = 'hello, w3big\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, w3big\n'
>>> # repr() 的参数可以是 Python 的任何对象
... repr((x, y, ('Google', 'w3big')))
"(32.5, 40000, ('Google', 'w3big'))"

Es gibt zwei Möglichkeiten, ein Quadrat und Würfel-Tabellen-Ausgang:

>>> for x in range(1, 11):
...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
...     # 注意前一行 'end' 的使用
...     print(repr(x*x*x).rjust(4))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

>>> for x in range(1, 11):
...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

Anmerkung: In dem ersten Beispiel wird der Raum zwischen jeder Säule wurde durch den Druck hinzugefügt ().

Dieses Beispiel zeigt, rjust String-Objekt () -Methode, die eine Zeichenfolge auf der rechten Seite sein kann, und füllen den Raum auf der linken Seite.

Es gibt ähnliche Methoden, wie ljust () und Mitte (). Diese Methoden geben nichts aus, kehren sie nur eine neue Zeichenfolge.

Eine andere Methode ZFill (), wird es in der linken Ziffer 0, füllen Sie wie folgt vor:

>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'

str.format () Die grundlegende Verwendung ist wie folgt:

>>> print('{}网址: "{}!"'.format('本教程', 'www.w3big.com'))
本教程网址: "www.w3big.com!"

Und in den Klammern Zeichen (so genannte Format-Felder) werden mit dem Formatparameter () in ersetzt werden.

Positionsformat () in der Zahl in den Klammern verwendet, um die ankommenden Objekt zeigen, wie folgt:

>>> print('{0} 和 {1}'.format('Google', 'w3big'))
Google 和 w3big
>>> print('{1} 和 {0}'.format('Google', 'w3big'))
w3big 和 Google

Wenn das Schlüsselwort-Argument () in dem Format, dann wird ihr Wert auf den Namen des Parameters zeigen.

>>> print('{name}网址: {site}'.format(name='本教程', site='www.w3big.com'))
本教程网址: www.w3big.com

Lage und Keyword-Argumente kann eine beliebige Kombination der folgenden sein:

>>> print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'w3big',
                                                       other='Taobao'))
站点列表 Google, w3big, 和 Taobao。
'! A' (mit dem ascii ()), (mit str ()) und (mit repr ()) verwendet werden kann, um einen Wert zu formatieren, bevor seine Transformation 'r' 's':
>>> import math
>>> print('常量 PI 的值近似为: {}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
>>> print('常量 PI 的值近似为: {!r}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。

Optionen ":", gefolgt vom Namen und Formatkennung kann das Feld ein. Dies ermöglicht eine bessere Wertformat. Im folgenden Beispiel wird die Pi auf drei Dezimalstellen behalten:

>>> import math
>>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))
常量 PI 的值近似为 3.142。

In ':' nach eine ganze Zahl geben, können Sie zumindest dafür sorgen, dass es so viele Domänenbreite sind. Nützlich, wenn man im Landschaftsbau Form verwendet.

>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3}
>>> for name, number in table.items():
...     print('{0:10} ==> {1:10d}'.format(name, number))
...
w3big     ==>          2
Taobao     ==>          3
Google     ==>          1

Wenn Sie einen langen Format-String haben, und Sie wollen sie nicht zu trennen, dann, wenn sie von Variablennamen Formatierung anstatt Lage wäre eine gute Sache sein.

Am einfachsten ist es in einem Wörterbuch zu passieren und dann in eckigen Klammern verwenden "[]", die wichtigsten:

>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3}
>>> print('w3big: {0[w3big]:d}; Google: {0[Google]:d}; '
          'Taobao: {0[Taobao]:d}'.format(table))
w3big: 2; Google: 1; Taobao: 3

Sie können auch die Variable vor der Tabelle '**' verwenden, um die gleiche Funktionalität zu erreichen:

>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3}
>>> print('w3big: {w3big:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table))
w3big: 2; Google: 1; Taobao: 3

Old-String-Formatierung

Der Operator% kann String-Formatierung erreicht werden. Format-String-Argument auf der linken Seite, wie es ähnlich zu sprintf () Formel, und das Recht der Substitution, dann zurückgegebenen String formatiert Beispiel:

>>> import math
>>> print('常量 PI 的值近似为:%5.3f。' % math.pi)
常量 PI 的值近似为:3.142。

Da str.format () Funktion relativ neu ist, verwendet die meisten Python-Code immer noch den Operator%. Da jedoch diese alte Format wird schließlich aus der Sprache entfernt werden, sollten Sie mehr str.format () verwenden.


Lesen Sie die Tastatureingabe

Python bietet die Eingabe () Funktion des Eingangs wird eine Textzeile aus dem Standard zu lesen, ist die Standard-Standard-Eingabe über die Tastatur.

Eingang kann einen Python-Ausdruck als Eingabe und gibt das Ergebnis der Operation erhalten.

#!/usr/bin/python3

str = input("请输入:");
print ("你输入的内容是: ", str)

Dies ergibt die folgenden Ergebnisse mit dem Eingang entsprechen:

请输入:本教程
你输入的内容是:  本教程

Lesen und Schreiben von Dateien

open () gibt ein Dateiobjekt, und grundlegende Syntax ist wie folgt:

open(filename, mode)
  • Dateiname: Dateiname Variable ist ein String, der den Wert enthält, die Sie einen Dateinamen zugreifen möchten.
  • Modus: Modus-Modus bestimmt die geöffnete Datei: Lesen, Schreiben, Anhängen. Siehe die vollständige Liste aller möglichen Werte wie folgt. Diese nicht-obligatorischen Parameter wird die Standard-Dateizugriffsmodus schreibgeschützt (r).

Öffnen Sie die komplette Liste der verschiedenen Modi der Datei:

Modus Beschreibung
r Öffnen Sie die Datei in Nur-Lese-Modus. Pointer-Datei wird am Anfang der Datei gesetzt werden. Dies ist der Standardmodus.
rb Öffnen Sie eine Datei für schreibgeschützte im Binärformat. Wird Zeiger am Anfang der Datei Datei. Dies ist der Standardmodus.
r + Öffnen Sie eine Datei zum Lesen und Schreiben. Wird Zeiger am Anfang der Datei Datei.
rb + Öffnen Sie eine Datei zum Lesen und Schreiben im Binärformat. Wird Zeiger am Anfang der Datei Datei.
w Öffnen Sie eine Datei nur zum Schreiben. Wenn die Datei bereits vorhanden ist, wird sie überschrieben. Wenn die Datei erstellen nicht existiert, wird eine neue Datei.
wb Öffnen Sie eine Datei nur im binären Format zu schreiben. Wenn die Datei bereits vorhanden ist, wird sie überschrieben. Wenn die Datei erstellen nicht existiert, wird eine neue Datei.
w + Öffnen Sie eine Datei zum Lesen und Schreiben. Wenn die Datei bereits vorhanden ist, wird sie überschrieben. Wenn die Datei erstellen nicht existiert, wird eine neue Datei.
wb + Öffnen Sie eine Datei zum Lesen und Schreiben im Binärformat. Wenn die Datei bereits vorhanden ist, wird sie überschrieben. Wenn die Datei erstellen nicht existiert, wird eine neue Datei.
ein Öffnen Sie eine Datei zum Anhängen. Wenn die Datei bereits vorhanden ist, wird der Dateizeiger am Ende der Datei platziert werden. Mit anderen Worten, nachdem der neue Inhalt wird auf den vorhandenen Inhalt geschrieben werden. Wenn die Datei erstellen nicht vorhanden ist, um eine neue Datei zum Schreiben.
ab Öffnen Sie eine Datei zum Anfügen im binären Format. Wenn die Datei bereits vorhanden ist, wird der Dateizeiger am Ende der Datei platziert werden. Mit anderen Worten, nachdem der neue Inhalt wird auf den vorhandenen Inhalt geschrieben werden. Wenn die Datei erstellen nicht vorhanden ist, um eine neue Datei zum Schreiben.
a + Öffnen Sie eine Datei zum Lesen und Schreiben. Wenn die Datei bereits vorhanden ist, wird der Dateizeiger am Ende der Datei platziert werden. Es wird anhängen Modus die Datei geöffnet wird. Wenn die Datei erstellen nicht vorhanden ist, um eine neue Datei zum Lesen und Schreiben.
ab + Öffnen Sie eine Datei zum Anfügen im binären Format. Wenn die Datei bereits vorhanden ist, wird der Dateizeiger am Ende der Datei platziert werden. Wenn die Datei erstellen nicht vorhanden ist, um eine neue Datei zum Lesen und Schreiben.

Die folgenden Beispiele werden in der Folge in der Datei foo.txt geschrieben werden:

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "w")

f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )

# 关闭打开的文件
f.close()
  • Der erste Parameter ist der Name der Datei, die Sie öffnen möchten.
  • Character zweite Parameter beschreibt, wie die Datei zu verwenden. Modus kann 'r', wenn die Datei schreibgeschützt ist, 'w' für nur schriftlich (wenn die Datei vorhanden ist, wird es gelöscht werden), und "a" für zusätzliche Dateiinhalte; alle Daten geschrieben werden automatisch am Ende hinzugefügt werden lesen und schreiben. 'r +' für beide. mode-Argument ist optional; 'r' wird der Standardwert sein.

Öffnet die Datei foo.txt, sieht wie folgt aus:

$ cat /tmp/foo.txt 
Python 是一个非常好的语言。
是的,的确非常好!!

Die Methode von Dateiobjekten

Dieses Beispiel geht davon aus, dass der verbleibende Abschnitt ein Dateiobjekt f des gerufenen geschaffen hat.

f.read ()

Um die Inhalte einer Datei lesen, rufen f.read (size), die eine bestimmte Anzahl von Daten gelesen wird, und dann wieder als ein String oder Byte-Objekt.

Größe ist ein optionaler numerischer Parameter. Wenn die Größe ignoriert wird, oder negativ ist, wird der gesamte Inhalt der Datei zu lesen und zurückgeführt werden.

Im folgenden Beispiel wird davon ausgegangen, dass die Datei existiert foo.txt (in dem obigen Beispiel erzeugt wurde):

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.read()
print(str)

# 关闭打开的文件
f.close()

Das obige Programm, das Ausgabe ist:

Python 是一个非常好的语言。
是的,的确非常好!!

f.readline ()

f.readline () lesen Sie eine einzelne Zeile aus der Datei. Newline Zeichen '\ n'. f.readline () einen leeren String zurück, wenn, erklärte, dass es in die letzte Zeile gelesen worden war.

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readline()
print(str)

# 关闭打开的文件
f.close()

Das obige Programm, das Ausgabe ist:

Python 是一个非常好的语言。

f.readlines ()

f.readlines () werden alle Zeilen in der Datei enthalten sind zurück.

Wenn der optionale Parameter sizeHint, dann gelesenen Bytes Länge angegeben, und diese geteilt durch Zeile Bytes.

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readlines()
print(str)

# 关闭打开的文件
f.close()

Das obige Programm, das Ausgabe ist:

['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']

Ein anderer Weg ist über ein Dateiobjekt zu durchlaufen und dann liest jede Zeile:

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

for line in f:
    print(line, end='')

# 关闭打开的文件
f.close()

Das obige Programm, das Ausgabe ist:

Python 是一个非常好的语言。
是的,的确非常好!!

Diese Methode ist sehr einfach, aber es keine gute Kontrolle. Sowohl wegen der unterschiedlichen Verarbeitungsmechanismus, ist es am besten nicht zu mischen.

f.write ()

f.write (string) Die Zeichenfolge in die Datei geschrieben, und gibt die Anzahl der geschriebenen Zeichen.

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "w")

num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
print(num)
# 关闭打开的文件
f.close()

Das obige Programm, das Ausgabe ist:

29

Wenn Sie einige der Dinge zu schreiben möchten, die nicht eine Zeichenfolge ist, müssen Sie umgewandelt werden:

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo1.txt", "w")

value = ('www.w3big.com', 14)
s = str(value)
f.write(s)

# 关闭打开的文件
f.close()

Das obige Programm öffnen foo1.txt Datei:

$ cat /tmp/foo1.txt 
('www.w3big.com', 14)

f.tell ()

f.tell () gibt die Position einer Datei-Objekt zurzeit befindet, wird die Anzahl der Bytes vom Anfang der Datei das Zählen ist.

f.seek ()

Wenn Sie die aktuelle Position der Datei ändern möchten, können Sie f.seek (Offset, from_what) -Funktion.

From_what Wert, wenn es der Beginn 0 ist, zeigt an, wenn es das Ende von 1 zeigt die aktuelle Position, 2-Datei ist, beispielsweise:

  • suchen (x, 0): Von der Startposition, das heißt die erste Zeile des ersten Zeichens der Datei beginnt x Zeichen zu bewegen
  • suchen (x, 1): zeigt eine Rückwärtsbewegung x Zeichen von der aktuellen Position
  • suchen (-x, 2): zeigt eine mobile x Zeichen aus dem vorderen Ende der Datei

from_what Standardwert ist 0, das heißt, der Anfang der Datei. Hier ist ein komplettes Beispiel:

>>> f = open('/tmp/foo.txt', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)     # 移动到文件的第六个字节
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # 移动到文件的倒数第三字节
13
>>> f.read(1)
b'd'

f.close ()

In der Textdatei (nicht die offenen Dateien-Modus b) nur in Bezug auf den Beginn der Datei zu suchen.

Wenn Sie mit einer Datei fertig sind, rufen f.close () die Datei und lassen Sie die Systemressourcen zu schließen, wenn Sie versuchen, die Datei zu erinnern, wird eine Ausnahme ausgelöst.

>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file
<pre>
<p>
当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:</p>
<pre>
>>> with open('/tmp/foo.txt', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

Datei-Objekt Es gibt andere Methoden, wie isatty () und trucate (), aber diese sind in der Regel weniger.


Beize Modul

Das Python-Beize-Modul implementiert die Basisdatensequenz und Deserialisierung.

Wir konnten die Serialisierung Betrieb Beize Modul Zielprogramm zu speichern Informationen in einer Datei in den permanenten Speicher ausgeführt wird.

Durch Deserialisierung Beize-Modul können wir ein Programm erstellen, das Objekt aus der Datei zu speichern.

Basisoberfläche:

pickle.dump(obj, file, [,protocol])

Mit diesem Objekt Beize, in der Lage sein, die Datei als gelesen zu öffnen:

x = pickle.load(file)

Hinweis: Lesen Sie eine Zeichenfolge aus der Datei und die Rekonstruktion der ursprünglichen Python - Objekte.

Datei: Datei-ähnliches Objekt mit read () und Readline- () Schnittstelle.

Beispiel 1:

#!/usr/bin/python3
import pickle

# 使用pickle模块将数据对象保存到文件
data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()

Beispiel 2:

#!/usr/bin/python3
import pprint, pickle

#使用pickle模块从文件中重构python对象
pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()