Lesen von Standardeingabe- oder Variablendateien gleichzeitig wie der Befehl Einfügen in Python

Es wird empfohlen, beim Öffnen einer Datei in Python die Anweisung "with" zu verwenden. Das gleichzeitige Öffnen variabler Dateien mit dieser Syntax ist jedoch nicht einfach. Natürlich funktioniert es nicht, auch wenn ich es so schreibe.

with [open(fn) for fn in file_names] as files:

Wenn Sie beispielsweise eine Verarbeitung wie den Befehl Einfügen ausführen, ist ein gleichzeitiges Öffnen unbedingt erforderlich. In diesem Artikel werde ich daher beschreiben, wie Sie mit der Anweisung "with" ein Verhalten wie den Befehl "paste" in Python erzielen.

Verwenden Sie das contextlib-Modul!

paste.py


import argparse
import contextlib


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('fs', nargs='*', type=argparse.FileType(),
                        default='-')
    parser.add_argument('--delimiter', default='\t')
    args = parser.parse_args()

    with contextlib.ExitStack() as stack:
        for f in args.fs:
            stack.enter_context(f)
        paste(args.fs, args.delimiter)


if __name__ == "__main__":
    main()

Das Verhalten, wenn "type = argparse.FileType (), default =" - "" in "add_argument ()" angegeben ist, ist dieser Artikel Wie es ist in. Und dieses Mal können Sie durch Kombinieren mit nargs = '*' eine Liste von Dateiobjekten aus einer variablen Anzahl von Befehlszeilenargumenten abrufen.

Und was ich am meisten vermitteln möchte, ist der Teil dieser "with" -Aussage. Erstens wird die with-Anweisung verwendet, um die Ausführung eines Blocks mit der Methode "context manager" zu verpacken. Das Modul zur einfachen Implementierung dieses Kontextmanagertyps ist contextlib.

Um eine variable Anzahl von Dateien mit einer "with" -Anweisung wie dieser zu verarbeiten, erstellen Sie zuerst einen Kontextmanager mit "ExitStack ()" und fügen Sie das Objekt hinzu, das Sie mit "enter_context ()" verwalten möchten. Damit wird beim Verlassen des with-Blocks fest geschlossen aufgerufen.

Implementierung von Paste

Abweichend vom Zweck dieses Artikels finden Sie hier ein Beispiel für die Implementierung von "paste ()".

from itertools import zip_longest


def rstrip(x):
    if x is None:
        return ''
    else:
        return x.rstrip()


def paste(files, delimiter):
    for lines in zip_longest(*files):
        stripped = map(rstrip, lines)
        print(delimiter.join(stripped))

Beiseite

Frage 13 von 100 Sprachverarbeitungsklopfen ist auch mit diesem Code in Ordnung

Recommended Posts

Lesen von Standardeingabe- oder Variablendateien gleichzeitig wie der Befehl Einfügen in Python
[Python] So öffnen Sie zwei oder mehr Dateien gleichzeitig
Lesen von Text mit Standardeingabe oder Dateinamen wie cat in Python
So erhalten Sie die Dateien im Ordner [Python]
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
So erhalten Sie den Variablennamen selbst in Python
So messen Sie die Verarbeitungszeit mit Python oder Java
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
Im Python-Befehl zeigt Python auf Python3.8
[sh] Das Speichern der Befehlsausführung führt zu Variablen
So überprüfen Sie die Speichergröße einer Variablen in Python
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
Lesen von CSV-Dateien mit Pandas
[Python] Fügen Sie der Standardeingabedatei einen Kommentar hinzu
So blenden Sie die Eingabeaufforderung aus, wenn Sie Python in Visual Studio 2015 ausführen
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Verwendung der C-Bibliothek in Python
So generieren Sie QR-Code und Barcode in Python und lesen ihn normal oder in Echtzeit mit OpenCV
So empfangen Sie Befehlszeilenargumente in Python
Einbetten von Variablen in Python-Strings
Zusammenfassung zum Importieren von Dateien in Python 3
Lesen aller in * .py enthaltenen Klassen in dem von Python angegebenen Verzeichnis
Lesen von Zeitreihendaten in PyTorch
Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig
So geben Sie "Ketsumaimo" standardmäßig in Python aus
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
So rufen Sie den n-ten größten Wert in Python ab
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
So laden Sie Dateien von Selenium of Python in Chrome herunter
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
Verwendung des in Lobe in Python erlernten Modells
[Python] So geben Sie Listenwerte der Reihe nach aus
Verfahren zum gleichzeitigen Ändern des Tabellennamens und des Spaltennamens des Django-Modells
So berechnen Sie die Summe oder den Durchschnitt von Zeitreihen-CSV-Daten in einem Augenblick
Was scheint eine Vorlage für den Standardeingabe-Teil des Competition Pro in Python3 zu sein
Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)
So wechseln Sie die Konfigurationsdatei, die von Python gelesen werden soll
[Go language] So erhalten Sie Terminaleingaben in Echtzeit
So führen Sie eine Python-Datei an einer Windows 10-Eingabeaufforderung aus
Verwendung der Methode __call__ in der Python-Klasse
Ändern Sie das Standardausgabeziel in eine Datei in Python
So importieren Sie Dateien in Python an eine beliebige Stelle
So melden Sie sich automatisch wie 1Password von der CLI an
Erlauben Sie Python, die Zeichenfolge der Eingabedatei aus dem Ordner auszuwählen
Kopieren und Einfügen von Befehlszeileninhalten mit bash unter Linux oder Mac ohne Maus
Schlafverarbeitung für einen bestimmten Zeitraum (Sekunden) oder länger in Python
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Wie man in Python entwickelt
[Python] Verwendung von input ()
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
So bestimmen Sie die Existenz eines Selenelements in Python
Wie Sie die interne Struktur eines Objekts in Python kennen
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
Das 15. Offline-Echtzeit-Schreiben eines Referenzproblems in Python