2015-03-27 10 views
7

Was macht der neue offene Dateimodus "x" in Python 3?Was macht python3 den "x" Modus?

hier ist die Doc von python 3:

'r': offen zum Lesen (default)

'w': offen für das Schreiben, Kürzen der Datei zuerst

'x' : offen für exklusive Erstellung, fehlgeschlagen, wenn die Datei bereits existiert

'a': zum Schreiben geöffnet, hängt am Ende der Datei an, wenn sie existiert

'b': Binärmodus

't': Textmodus (Standard)

'+': Öffnen einer Plattendatei für die Aktualisierung (Lesen und Schreiben)

'U': universal newlines Modus (nicht mehr weiterentwickelt)

Was bedeutet "exklusive Erstellung"?

Ich teste den "x" Modus und einige finden:

  • Es kann nicht mit "r/w/a"
  • "x" nur beschreibbar ist verwendet werden. "X +" schreiben kann und
  • Die Datei lesen darf nicht vorhanden sein, bevor open
  • Die Datei wird nach open

So erstellt werden, "x" ist ähnlich wie "w". Aber für "x", , wenn die Datei existiert, erhöhen FileExistsError. Für "w" wird einfach eine neue Datei erstellt/die vorhandene Datei abgeschnitten.

Bin ich richtig? Ist das der einzige Unterschied?

+5

Sie haben bereits Ihre eigene Frage beantwortet. Ja, das stimmt, das ist was 'x' bedeutet: Das gleiche wie' w', löst aber eine Ausnahme aus, wenn die Datei bereits existiert. –

Antwort

6

Wie @Martjin bereits gesagt hat, haben Sie bereits Ihre eigene Frage beantwortet. Ich würde nur im Handbuch auf der Erklärung werden zu verstärken, um ein besseres Verständnis des Textes zu erhalten

‚x‘: offen für exklusive Kreation, andernfalls, wenn die Datei

existiert bereits

Wenn Sie exclusive creation angeben, es bedeutet eindeutig, dass Sie diesen Modus zum ausschließlichen Erstellen der Datei verwenden würden. Dies ist erforderlich, wenn Sie nicht versehentlich eine vorhandene Datei mit einem der beiden Modi w oder a abschneiden/anhängen.

In Ermangelung dessen sollten Entwickler vorsichtig sein, um das Vorhandensein der Datei vor dem Sprung zu überprüfen, um die Datei für die Aktualisierung zu öffnen.

Mit diesem Modus würde der Code einfach als

try: 
    with open("fname", "x") as fout: 
     #Work with your open file 
except FileExistsError: 
    # Your error handling goes here 

Zuvor wenn Ihr Code geschrieben vielleicht hatte es als

import os.path 
if os.path.isfile(fname): 
    # Your error handling goes here 
else: 
    with open("fname", "w") as fout: 
     # Work with your open file 
+0

Sie sollten beachten, dass der Code "Bisher though ..." anfällig für Race Conditions ist, wenn sich der Status der Datei zwischen der "if" -Evaluierung und der Ausführung des "else" -Blocks ändert. Deshalb wurde '' x'' eingeführt, um Wettlaufbedingungen im Benutzercode zu verhindern. – Dubslow

2

Ja, das ist im Grunde geschrieben werden. gleichzeitig die Verwendung von x Modus

Es ist praktisch, wenn Sie zwei Instanzen des Programms finden kann, wird ausgeführt gewährleisten nur ein wird eine Datei erfolgreich erstellen, mit dem anderen versagt.

Ein klassisches Beispiel ist Daemons, die ihre Prozess-ID in eine pid Datei schreiben (damit kann leicht signalisiert werden). Durch die Verwendung von x können Sie garantieren, dass nur ein Daemon gleichzeitig ausgeführt werden kann, etwas, das ohne den x -Modus und anfällig für Race-Bedingungen schwieriger ist.