Comment ouvrir un fichier texte et le lire ligne par ligne? Il y a deux cas différents pour lesquels je souhaite des réponses:
Pour le deuxième cas, je ne veux pas avoir à garder toutes les lignes en mémoire en même temps.
La lecture d'un fichier en mémoire d'un coup comme un tableau de lignes n'est qu'un appel à la fonction readlines
:
Julia> words = readlines("/usr/share/dict/words")
235886-element Array{String,1}:
"A"
"a"
"aa"
⋮
"zythum"
"Zyzomys"
"Zyzzogeton"
Par défaut, cela supprime les sauts de ligne, mais si vous souhaitez les conserver, vous pouvez passer l'argument de mot clé keep=true
:
Julia> words = readlines("/usr/share/dict/words", keep=true)
235886-element Array{String,1}:
"A\n"
"a\n"
"aa\n"
⋮
"zythum\n"
"Zyzomys\n"
"Zyzzogeton\n"
Si vous avez un objet fichier déjà ouvert, vous pouvez également le transmettre à la fonction readlines
:
Julia> open("/usr/share/dict/words") do io
readline(io) # throw out the first line
readlines(io)
end
235885-element Array{String,1}:
"a"
"aa"
"aal"
⋮
"zythum"
"Zyzomys"
"Zyzzogeton"
Cela illustre la fonction readline
, qui lit une seule ligne à partir d'un objet d'E/S ouvert, ou quand on lui donne un nom de fichier, ouvre le fichier et lit la première ligne de celui-ci:
Julia> readline("/usr/share/dict/words")
"A"
Si vous ne voulez pas charger le contenu du fichier en une seule fois (ou si vous traitez des données en streaming comme à partir d'une prise réseau), vous pouvez utiliser la fonction eachline
pour obtenir un itérateur qui produit les lignes une à la fois:
Julia> for Word in eachline("/usr/share/dict/words")
if length(Word) >= 24
println(Word)
end
end
formaldehydesulphoxylate
pathologicopsychological
scientificophilosophical
tetraiodophenolphthalein
thyroparathyroidectomize
La fonction eachline
peut, comme readlines
, également recevoir un descripteur de fichier ouvert à partir duquel lire les lignes. Vous pouvez également "rouler votre propre" itérateur en ouvrant le fichier et en appelant readline
à plusieurs reprises:
Julia> open("/usr/share/dict/words") do io
while !eof(io)
Word = readline(io)
if length(Word) >= 24
println(Word)
end
end
end
formaldehydesulphoxylate
pathologicopsychological
scientificophilosophical
tetraiodophenolphthalein
thyroparathyroidectomize
Cela équivaut à ce que eachline
fait pour vous et il est rare de devoir le faire vous-même mais si vous en avez besoin, la capacité est là. Pour plus d'informations sur la lecture d'un fichier caractère par caractère, consultez cette question et réponse: Comment utilisons-nous Julia pour lire chaque caractère d'un fichier .txt, un à la fois?