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

open("./example-test/julia/example-file.txt") do file
   # 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:

# Datei öffnen; falls sie nicht existiert, example-file.txt erstellen
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:

open("example-file.txt", "w") do io
    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

# Dateiinhalt lesen
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

# Datei öffnen
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

# Dateiinhalt lesen
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

# Datei öffnen
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

# Datei öffnen
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

open("example-file.txt") do f
    # 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

for n in fieldnames(typeof(stat("example-file.txt")))
    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

println(map(abspath, readdir()))

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`.

Andere Erweiterungen