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