Dans cet article, j'ai résumé les connaissances de base sur la gestion des fichiers TSV et des fichiers CSV dans Ruby comme s'il s'agissait de mon mémo. Avant TSV et CSV, je voudrais vérifier la classe File ensemble.
Fichier contenant des données séparées par des tabulations
Fichier contenant des données séparées par des virgules (,)
meibo.txt
john m 18
paul m 20
alice f 15
dabid m 17
jasmin f 17
# Comment écrire 1
File.open("meibo.txt") do |file|
En traitement
end
# Comment écrire 2
file = File.open("meibo.txt")
En traitement
file.close
Ecrire 1 fermera le fichier sans autorisation même si vous l'ouvrez, mais écrire 2 gardera le fichier ouvert à moins que vous n'utilisiez la méthode close
. Donc, j'aime personnellement Ecrire 1.
File.open("meibo.txt") do |file|
puts.file
end
Par exemple, si vous procédez comme suit, vous obtiendrez la sortie standard de l'objet File comme suit.
<File:0x00007fba4497ea68>
Le fichier ouvert sera lu.
File.open("meibo.txt") do |file|
p file.read
end
Ensuite, la sortie standard sera la suivante.
"john\tm\t18\npaul\tm\t20\nalice\tf\t15\ndabid\tm\t17\njasmin\tf\t17\n"
Vous pouvez le lire soudainement.
file = File.read("meibo.txt")
p file
=>
"john\tm\t18\npaul\tm\t20\nalice\tf\t15\ndabid\tm\t17\njasmin\tf\t17\n"
Si vous souhaitez lire ligne par ligne, ouvrez le fichier une fois, lisez-le ligne par ligne dans la partie traitement et insérez votre traitement préféré comme indiqué ci-dessous.
File.open("meibo.txt") do |file|
file.each do |line|
En traitement
end
end
# Par exemple
File.open("meibo.txt") do |file|
file.each do |line|
p "#{line.chomp}\tfoo"
end
end
=>
"john\tm\t18\tfoo"
"paul\tm\t20\tfoo"
"alice\tf\t15\tfoo"
"dabid\tm\t17\tfoo"
"jasmin\tf\t17\tfoo"
Ce qui précède est de savoir comment le gérer dans la classe File, mais comme la sortie est une chaîne de chaînes, je pense que c'est un peu difficile à gérer. Par conséquent, vous pouvez faciliter la gestion des données en utilisant la classe CSV.
Je pense que c'est à l'origine une classe pour gérer les fichiers CSV, mais si vous utilisez l'option col_sep
(sépare par la chaîne de caractères spécifiée), les fichiers TSV peuvent également être gérés par la classe CVS. Lorsque vous utilisez la classe CSV, ajoutez require" csv "
au début de la ligne.
require "csv"
# Si vous utilisez la méthode ouverte
CSV.open("meibo.txt", col_sep: "\t") do |tsv|
p tsv.read
end
# Si vous n'utilisez pas la méthode ouverte
tsv = CSV.read("meibo.txt", col_sep: "\t")
p tsv
=>
[["john", "m", "18"], ["paul", "m", "20"], ["alice", "f", "15"], ["dabid", "m", "17"], ["jasmin", "f", "17"]]
Lorsqu'il est lu à l'aide de la méthode CSV, le résultat de la sortie est renvoyé dans un tableau.
Cela facilite la manipulation en tant que données.
Si vous voulez lire ligne par ligne, utilisez la méthode foreach
ci-dessous.
require "csv"
CSV.foreach("meibo.txt", col_sep: "\t") do |line|
En traitement
end
# Par exemple
CSV.foreach("meibo.txt", col_sep: "\t") do |line|
p line
end
=>
["john", "m", "18"]
["paul", "m", "20"]
["alice", "f", "15"]
["dabid", "m", "17"]
["jasmin", "f", "17"]
En faisant cela, vous pouvez traiter le tableau pour chaque ligne.
En passant, bien sûr, vous pouvez également ouvrir un nouveau fichier CSV et y écrire.
require "csv"
CSV.open("meibo.csv","w") do |line| #"w"Est en mode écriture
line << ["michel","m",16]
end
meibo.csv
michel,m,16
Enfin, vous pouvez convertir un fichier TSV en fichier CSV en utilisant la syntaxe introduite jusqu'à présent. Soudain, la conclusion est la suivante.
require "csv"
CSV.open('meibo.csv', 'w') do |csv|
CSV.foreach("meibo.txt", col_sep: "\t") do |line|
csv << line
end
end
Tout d'abord, préparez un fichier CSV en mode écriture. Le processus consiste à stocker chaque ligne du fichier TSV dans le fichier CSV une par une avec foreach
.
Vous pouvez faire le contraire de CSV à TSV.
Je ne comprenais pas un peu la classe File au début, mais j'ai pu l'organiser dans mon esprit en écrivant cet article, je vais donc continuer à l'utiliser.
Recommended Posts