Julia Datei lesen/schreiben
Julia bietet einige grundlegende Funktionen zum Umgang mit Dateien:
- open()- Datei öffnen
- read()- Dateiinhalt lesen
- close()- Datei schließen
Um Daten aus einer Datei zu lesen oder in sie zu schreiben, müssen Sie ein Dateihandle verwenden.
Ein Dateihandle ist eigentlich ein Zeiger, und der Zeiger zeigt auf eine bestimmte Position in der Datei.
Um Daten aus einer Datei zu lesen, ruft die Anwendung zunächst eine Betriebssystemfunktion auf, übergibt den Dateinamen und wählt einen Pfad zur Datei aus, um sie zu öffnen. Die Funktion, die die Datei öffnet, gibt eine Sequenznummer zurück, d. h. das Dateihandle. Dieses Dateihandle ist die eindeutige Kennung für die geöffnete Datei.
open()-Funktion
Julia kannopen()-Funktion verwenden, um eine Datei zu öffnen; diese Funktion gibt ein Dateihandle zurück:
Syntaxformat:
open(filename, mode)
filenameist der Dateiname,modeist der Lese-/Schreibmodus, der folgende Werte annehmen kann:
| Mode | Beschreibung | Schlüsselwort |
|---|---|---|
r |
read | none |
w |
write, create, truncate | write = true |
a |
Schreiben, Erstellen, Anhängen | append = true |
r+ |
Lesen, Schreiben | read = true, write = true |
w+ |
Lesen, Schreiben, Erstellen, Kürzen | truncate = true, read = true |
a+ |
Lesen, Schreiben, Erstellen, Anhängen | append = true, read = true |
# Windows 打开文件
foo = open("D://example-test//julia//example-file.txt")
# Linux oder Mac 打开文件
foo = open("./example-test/julia/example-file.txt")
close()-Funktion
Nachdem wir Dateioperationen abgeschlossen haben, müssen wir die Datei schließen; andernfalls kann es zu Problemen wie Ressourcenlecks kommen. Um eine Datei zu schließen, verwenden Sie dieclose()Funktion:
# 关闭上面代码中打开文件返回的 foo 句柄 close(foo)
In Julia empfehlen wir, jede Dateiverarbeitungsfunktion in einendo-Anweisungsblock einzubinden. Der Vorteil, Dateiverarbeitungsfunktionen in einen do-Anweisungsblock einzubinden, besteht darin, dass die geöffnete Datei automatisch geschlossen wird, wenn der Block die Ausführung beendet, d. h. es wird automatisch die close()-Funktion aufgerufen, wie unten gezeigt:
Beispiel
# Dateioperationen durchführen
end
Der obige Code muss die close()-Funktion nicht aufrufen, da er automatisch die close()-Funktion aufruft, um die Datei zu schließen.
Als Nächstes erstellen wir eine test.jl-Datei mit folgendem Code:
Code der test.jl-Datei:
io = open("example-file.txt", "w");
# Dateiinhalt schreiben
write(io, "Hello world!\nExample Julia Test");
# Datei schließen
close(io);
Führen Sie den obigen Code aus:
$ julia test.jl
Nach erfolgreicher Ausführung wird im Verzeichnis der aktuellen Codedatei eine Datei example-file.txt erstellt, und der geschriebene Inhalt lautet wie folgt:
Hello world! Example Julia Test
Wir können diedo-Anweisung verwenden, sodass dieclose()-Funktion nicht verwendet werden muss:
Code der test.jl-Datei:
write(io, "Hello world!\nExample Julia Test\nUse do statement)
end;
Führen Sie den obigen Code aus:
$ julia test.jl
Nach erfolgreicher Ausführung wird im Verzeichnis der aktuellen Codedatei eine Datei example-file.txt erstellt, und der geschriebene Inhalt lautet wie folgt:
Hello world! Example Julia Test 使用 do 语句
Beispiel
txt = open("example-file.txt") do Datei
read(file, String)
end;
# Ausgabe
println(txt)
read()-Funktion
Mit der read()-Funktion können wir den gesamten Inhalt einer Datei lesen, zum Beispiel:
txt = read(foo, String)
Beispiel
file = open("example-file.txt")
# Dateiinhalt lesen
txt = read(file, String)
# Datei schließen
close(file)
# Ausgabe
println(txt)
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
$ Julia test.jl Hello world! Example Julia Test
doIn der Anweisung verwenden Sie dieread()Funktion:
open(filename) do file
read(file, String)
end
Beispiel
txt = open("example-file.txt") do Datei
read(file, String)
end;
# Ausgabe
println(txt)
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
$ julia test.jl Hello world! Example Julia Test
Wir können die Funktionreadlines()verwenden, um den Dateiinhalt Zeile für Zeile in ein Array zu schreiben, mit folgender Syntax:
readlines(io::IO=stdin; keep::Bool=false) readlines(filename::AbstractString; keep::Bool=false)
Beispiel
file = open("example-file.txt")
# Dateiinhalt lesen
txt=readlines(file, keep=true)
# Datei schließen
close(file)
# Ausgabe
println(txt)
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
$ julia test.jl ["Hello world!\n", "Example Julia Test\n", "使用 do 语句"]
Wir können auch die Funktioneachline()verwenden, um die Datei Zeile für Zeile zu verarbeiten:
Beispiel
open("example-file.txt") do file
# Dateiinhalt Zeile für Zeile lesen
for ln in eachline(file)
# Stringlänge und String ausgeben
println("$(length(ln)), $(ln)")
end
end
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
$ julia test.jl 12, Hello world! 17, Example Julia Test 8, 使用 do 语句
Wir können auch die aktuelle Zeilennummer abrufen:
Beispiel
# Zeilennummer setzen
line = 1
while !eof(f)
x = readline(f)
println("$line $x")
# Zeile für Zeile inkrementieren
line += 1
end
end
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
$ julia test.jl 1 Hello world! 2 Example Julia Test 3 使用 do 语句
stat()-Funktion
stat() Die Funktion wird verwendet, um Dateiinformationen zu erhalten; das Format ist wie folgt:
stat(pathname)
Beispiel
println(n, ": ", getfield(stat("example-file.txt"),n))
end
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
$ julia test.jl desc: example-file.txt device: 16777222 inode: 35345094 mode: 33188 nlink: 1 uid: 501 gid: 20 rdev: 0 size: 47 blksize: 4096 blocks: 8 mtime: 1.6524042534674733e9 ctime: 1.6524042534674733e9
abspath()-Funktion
abspath() Die Funktion wird verwendet, um den absoluten Pfad einer Datei zu ermitteln und kann auf eine Liste abgebildet werden:
stat(pathname)
Beispiel
Führen Sie den obigen Code aus, das Ausgabeergebnis lautet wie folgt:
["/Users/EXAMPLE/example-test/.Rhistory", "/Users/EXAMPLE/example-test/.vscode", ...
Weitere Funktionen
Die folgende Tabelle listet weitere zugehörige Funktionen für den Umgang mit Dateien auf:
| Nein. | Funktion und Beschreibung |
|---|---|
| 1 |
cd(path) Ändert das aktuelle Verzeichnis |
| 2 |
pwd() Ermittelt das aktuelle Verzeichnis |
| 3 |
readdir(path) Gibt die Liste der Dateien und Verzeichnisse im aktuellen Verzeichnis zurück. |
| 4 |
abspath(path) Erzeugt absolute Pfade aus Dateinamen im aktuellen Verzeichnis. |
| 5 |
joinpath(str, str, ...) Setze einen Pfadnamen aus Argumenten zusammen. |
| 6 |
isdir(path) Ermittle, ob der angegebene Pfadparameter `path` ein Verzeichnis ist. |
| 7 |
splitdir(path) Teile den Pfad in ein Tupel aus Verzeichnisname und Dateiname auf. |
| 8 |
splitdrive(path) Unter Windows teile den Pfad in einen Laufwerksbuchstabenteil und einen Pfadteil auf; auf Unix-Systemen ist die erste Komponente immer eine leere Zeichenkette. |
| 9 |
splitext(path) Wenn die letzte Komponente des Pfads einen Punkt enthält, teile den Pfad in alles vor dem Punkt und alles einschließlich des Punkts und danach auf. Andernfalls gib ein Tupel aus dem unveränderten Argument und einer leeren Zeichenkette zurück. |
| 10 |
expanduser(path) Ersetze das Tilde-Zeichen `~` am Anfang des Pfads durch das Home-Verzeichnis des aktuellen Benutzers. |
| 11 |
normpath(path) Normalisiere den Pfad und entferne die Verzeichnisse "." und "..". |
| 12 |
realpath(path) Folge symbolischen Links, um den Pfad zu normalisieren, und entferne die Verzeichnisse "." und "..". |
| 13 |
homedir() Ermittelt das Home-Verzeichnis des aktuellen Benutzers. |
| 14 |
dirname(path) Ermittelt den Verzeichnisanteil des Pfadparameters `path`. |
| 15 |
basename(path) Ermittelt den Dateinamen-Teil des Pfadparameters `path`. |