dirname(@__FILE__)"/home/iraitz/Documentos/Projects/ciencia-datos-julia/parts/firststeps"
Como en todo lenguaje de programación, deberemos gestionar la lectura y escritura de ficheros. El sistema de ficheros lo gestiona el sistema operativo de nuestra máquina con lo que se trata más bien de interactuar con este al menos de cara a conocer por ejemplo, dónde estamos ubicados.
dirname(@__FILE__)"/home/iraitz/Documentos/Projects/ciencia-datos-julia/parts/firststeps"
Podemos crear carpetas de forma programática pero en la mayoría de casos se tratará de leer y escribir ficheros en rutas concretas. Para ello nos será útil la función joinpath que nos ayuda a conformar rutas tal y como el sistema de ficheros requiere.
root = dirname(@__FILE__)
joinpath(root, "ejemplo.txt")"/home/iraitz/Documentos/Projects/ciencia-datos-julia/parts/firststeps/ejemplo.txt"
Y como vimos anteriormente, usar la función readlines() para leer su contenido.
fichero = joinpath(root, "ejemplo.txt")
readline(fichero)"Hola desde un fichero!"
Imaginemos por tanto que queremos descargarnos un CSV (Comma Separated Value) con información sobre los pasajeros del Titanic
using Downloads
fichero_url = "https://raw.githubusercontent.com/datasciencedojo/datasets/refs/heads/master/titanic.csv"
fichero = Downloads.download(fichero_url)
readlines(fichero)[1:20]20-element Vector{String}:
"PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked"
"1,0,3,\"Braund, Mr. Owen Harris\",male,22,1,0,A/5 21171,7.25,,S"
"2,1,1,\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",female,38,1,0,PC 17599,71.2833,C85,C"
"3,1,3,\"Heikkinen, Miss. Laina\",female,26,0,0,STON/O2. 3101282,7.925,,S"
"4,1,1,\"Futrelle, Mrs. Jacques Heath (Lily May Peel)\",female,35,1,0,113803,53.1,C123,S"
"5,0,3,\"Allen, Mr. William Henry\",male,35,0,0,373450,8.05,,S"
"6,0,3,\"Moran, Mr. James\",male,,0,0,330877,8.4583,,Q"
"7,0,1,\"McCarthy, Mr. Timothy J\",male,54,0,0,17463,51.8625,E46,S"
"8,0,3,\"Palsson, Master. Gosta Leonard\",male,2,3,1,349909,21.075,,S"
"9,1,3,\"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)\",female,27,0,2,347742,11.1333,,S"
"10,1,2,\"Nasser, Mrs. Nicholas (Adele Achem)\",female,14,1,0,237736,30.0708,,C"
"11,1,3,\"Sandstrom, Miss. Marguerite Rut\",female,4,1,1,PP 9549,16.7,G6,S"
"12,1,1,\"Bonnell, Miss. Elizabeth\",female,58,0,0,113783,26.55,C103,S"
"13,0,3,\"Saundercock, Mr. William Henry\",male,20,0,0,A/5. 2151,8.05,,S"
"14,0,3,\"Andersson, Mr. Anders Johan\",male,39,1,5,347082,31.275,,S"
"15,0,3,\"Vestrom, Miss. Hulda Amanda Adolfina\",female,14,0,0,350406,7.8542,,S"
"16,1,2,\"Hewlett, Mrs. (Mary D Kingcome) \",female,55,0,0,248706,16,,S"
"17,0,3,\"Rice, Master. Eugene\",male,2,4,1,382652,29.125,,Q"
"18,1,2,\"Williams, Mr. Charles Eugene\",male,,0,0,244373,13,,S"
"19,0,3,\"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)\",female,31,1,0,345763,18,,S"
Si queremos conservar el fichero para más adelante podemos recurrir a la función write() y guardarlo donde nosotros queramos.
destino = joinpath(mktempdir(), "titanic.csv")
write(destino, read(fichero))60302
Guardamos en un directorio temporal a propósito: construir el libro no debería modificar ficheros ya versionados. En el repositorio el conjunto ya está en data/titanic.csv, de modo que los capítulos siguientes funcionan aunque la descarga falle.
Y podemos revisar el contenido iterando sobre walkdir() que recorre los elementos de un directorio.
itr = walkdir("../../data/")
(root, dirs, files) = first(itr)("../../data/", String[], [".gitkeep", "titanic.csv", "titanic.json", "titanic.parquet"])
Disponemos de los comandos más usuales a la hora de crear un directorio (mkdir()) o adentrarnos en él (cd()). Tenéis más detalle sobre los comandos disponibles aquí.