Julia Lectura y Escritura de Archivos (File)

Julia proporciona algunas funciones básicas para manejar archivos:

  • open()- Abrir archivo
  • read()- Leer el contenido del archivo
  • close()- Cerrar archivo

Para leer o escribir datos en un archivo se necesita un manejador de archivo.

El manejador de archivo es en realidad un puntero, y el puntero apunta a una posición determinada en el archivo.

Para leer datos de un archivo, la aplicación primero debe llamar a la función del sistema operativo y pasar el nombre del archivo, además de elegir una ruta al archivo para abrirlo. La función que abre el archivo devuelve un número de secuencia, es decir, el manejador de archivo (file handle). Este manejador de archivo es el identificador único para el archivo abierto.

Función open()

Julia puede usaropen()la función para abrir un archivo, que devuelve el manejador de archivo:

Formato de sintaxis:

open(filename, mode)

filenamees el nombre del archivo,modees el modo de lectura/escritura, que puede ser uno de los siguientes valores:

mode (modo) Descripción Palabra clave
r read none
w Escribir, crear, truncar write = true
a Escribir, crear, añadir append = true
r+ Leer, escribir read = true, write = true
w+ Leer, escribir, crear, truncar truncate = true, read = true
a+ Leer, escribir, crear, escribir, crear, añadir append = true, read = true
# Windows 打开文件
foo = open("D://ejemplo-test//julia//ejemplo-file.txt")

# Linux o  Mac 打开文件 
foo = open("./ejemplo-test/julia/ejemplo-file.txt")

Función close()

Después de completar las operaciones sobre el archivo, necesitamos cerrarlo; de lo contrario, se producirán problemas como fugas de recursos. Para cerrar el archivo se usaclose()la función:

# 关闭上面代码中打开文件返回的 foo 句柄
close(foo)

En Julia, se recomienda envolver cualquier función de manejo de archivos endoun bloque de sentencias. La ventaja de envolver la función de manejo de archivos en un bloque do es que, cuando el bloque termina de ejecutarse, el archivo abierto se cerrará automáticamente, es decir, se llamará automáticamente a la función close(), como se muestra a continuación:

Ejemplo

open("./ejemplo-test/julia/ejemplo-file.txt") do file
   # Realizar operaciones sobre el archivo
end

El código anterior no necesita llamar a la función close(), porque automáticamente llama a la función close() para cerrar el archivo.

A continuación, creamos un archivo test.jl, con el siguiente código:

Código del archivo test.jl:

# Abrir el archivo; si no existe, crear ejemplo-file.txt
io = open("ejemplo-file.txt", "w");

# Escribir el contenido en el archivo
write(io, "Hello world!\nEjemplo Julia Test");

# Cerrar el archivo
close(io);

Ejecute el código anterior:

$ julia test.jl

Tras la ejecución exitosa, creamos un archivo ejemplo-file.txt en el directorio del archivo de código actual, con el siguiente contenido:

Hello world!
Ejemplo Julia Test

Podemos usardola sentencia, de modo que no sea necesario usarclose()la función:

Código del archivo test.jl:

open("ejemplo-file.txt", "w") do io
    write(io, "Hello world!\nEjemplo Julia Test\nUsar la sentencia do)
end;

Ejecute el código anterior:

$ julia test.jl

Tras la ejecución exitosa, creamos un archivo ejemplo-file.txt en el directorio del archivo de código actual, con el siguiente contenido:

Hello world!
Ejemplo Julia Test
使用 do 语句

Ejemplo

# Leer el contenido del archivo
txt = open("ejemplo-file.txt") do file
    read(file, String)
end;
# Salida
println(txt)

Función read()

Usando la función read(), podemos leer todo el contenido del archivo, por ejemplo:

txt = read(foo, String)

Ejemplo

# Abrir el archivo
file = open("ejemplo-file.txt")

# Leer el contenido del archivo
txt = read(file, String)

# Cerrar el archivo
close(file)

# Salida
println(txt)

Ejecute el código anterior, el resultado de salida es el siguiente:

$ Julia test.jl
Hello world!
Ejemplo Julia Test

doEn la sentencia se usaread()la función:

open(filename) do file
    read(file, String)
end

Ejemplo

# Leer el contenido del archivo
txt = open("ejemplo-file.txt") do file
    read(file, String)
end;
# Salida
println(txt)

Ejecute el código anterior, el resultado de salida es el siguiente:

$ julia test.jl
Hello world!
Ejemplo Julia Test

Podemos usarreadlines()la función para poner el contenido del archivo en un arreglo por líneas, la sintaxis es la siguiente:

readlines(io::IO=stdin; keep::Bool=false)
readlines(filename::AbstractString; keep::Bool=false)

Ejemplo

# Abrir el archivo
file = open("ejemplo-file.txt")

# Leer el contenido del archivo
txt=readlines(file, keep=true)

# Cerrar el archivo
close(file)

# Salida
println(txt)

Ejecute el código anterior, el resultado de salida es el siguiente:

$ julia test.jl
["Hello world!\n", "Ejemplo Julia Test\n", "使用 do 语句"]

También podemos usareachline()la función para procesar el archivo línea por línea:

Ejemplo

# Abrir el archivo
open("ejemplo-file.txt") do file
# Leer el contenido del archivo línea por línea
    for ln in eachline(file)
        # Imprimir la longitud de la cadena y la cadena
        println("$(length(ln)), $(ln)")
    end
end

Ejecute el código anterior, el resultado de salida es el siguiente:

$ julia test.jl
12, Hello world!
17, Ejemplo Julia Test
8, 使用 do 语句

También podemos obtener el número de línea actual:

Ejemplo

open("ejemplo-file.txt") do f
    # Establecer el número de línea
    line = 1
    while !eof(f)
       x = readline(f)
       println("$line $x")
       # Incrementar línea por línea
       line += 1
    end
 end

Ejecute el código anterior, el resultado de salida es el siguiente:

$ julia test.jl
1 Hello world!
2 Ejemplo Julia Test
3 使用 do 语句

Función stat()

stat() La función se utiliza para obtener la información del archivo, el formato es el siguiente:

stat(pathname) 

Ejemplo

for n in fieldnames(typeof(stat("ejemplo-file.txt")))
    println(n, ": ", getfield(stat("ejemplo-file.txt"),n))
end

Ejecute el código anterior, el resultado de salida es el siguiente:

$ julia test.jl
desc: ejemplo-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

Función abspath()

abspath() La función se utiliza para obtener la ruta absoluta del archivo, y se puede mapear en la lista:

stat(pathname) 

Ejemplo

println(map(abspath, readdir()))

Ejecute el código anterior, el resultado de salida es el siguiente:

["/Users/EJEMPLO/ejemplo-test/.Rhistory", "/Users/EJEMPLO/ejemplo-test/.vscode", 
...

Más funciones

La siguiente tabla enumera otras funciones relacionadas con el manejo de archivos:

N.° Función y descripción
1

cd(path)

Cambiar el directorio actual

2

pwd()

Obtener el directorio actual

3

readdir(path)

Devuelve la lista de archivos y directorios del directorio actual.

4

abspath(path)

Genera rutas absolutas a partir de los nombres de archivo del directorio actual.

5

joinpath(str, str, ...)

Ensambla un nombre de ruta a partir de los parámetros.

6

isdir(path)

Determina si el parámetro de ruta proporcionado `path` es un directorio.

7

splitdir(path)

Divide la ruta en una tupla de nombre de directorio y nombre de archivo.

8

splitdrive(path)

En Windows, divide la ruta en la parte de letra de unidad y la parte de ruta; en sistemas Unix, el primer componente siempre es una cadena vacía.

9

splitext(path)

Si el último componente de la ruta contiene un punto, divide la ruta en todo lo que está antes del punto y en todo lo que incluye el punto y lo que está después. De lo contrario, devuelve una tupla con el parámetro sin modificar y una cadena vacía.

10

expanduser(path)

Reemplaza el carácter de tilde ~ al comienzo de la ruta por el directorio principal del usuario actual.

11

normpath(path)

Normaliza la ruta y elimina los directorios "." y "..".

12

realpath(path)

Normaliza la ruta a través de enlaces simbólicos y elimina los directorios "." y "..".

13

homedir()

Obtiene el directorio principal del usuario actual.

14

dirname(path)

Obtiene la parte del directorio del parámetro de ruta `path`.

15

basename(path)

Obtiene la parte del nombre de archivo del parámetro de ruta `path`.

Otras extensiones