Comment gérer les fichiers TSV et les fichiers CSV dans Ruby

introduction

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.

Qu'est-ce qu'un fichier TSV?

Fichier contenant des données séparées par des tabulations

Qu'est-ce qu'un fichier CSV?

Fichier contenant des données séparées par des virgules (,)

Dans cet article, nous utiliserons le fichier TSV suivant comme exemple.

 meibo.txt
john	m	18
paul	m	20
alice	f	15
dabid	m	17
jasmin	f	17

À propos de la classe File

Fichier ouvert

# 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>

Lisez le dossier

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.

À propos de 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

Convertir TSV en CSV

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.

à la fin

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

Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Conversion du fichier TSV en fichier CSV (avec BOM) en Ruby
Placez les fichiers CSV contenant "'" et "" "dans Ruby 2.3 dans MySQL
Comment itérer indéfiniment en Ruby
Comment installer Bootstrap dans Ruby
Gérer les fichiers CSV téléchargés sur GCS
Différences dans la gestion des chaînes entre Java et Perl
[Java] Comment sortir et écrire des fichiers!
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
[Facile] Comment mettre à niveau Ruby et le bundler
Ruby: CSV :: Comment utiliser la note de tableau
Conversion de JSON en TSV et TSV en JSON avec Ruby
[Ruby] Comment convertir un fichier CSV en Yaml (Yml)
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Comment gérer facultatif dans les tampons de protocole (proto3)
Comment créer des outils de parquet et fusionner des fichiers Parquet
Comment créer la blockchain la plus simple de Ruby
Ruby Comment convertir entre les majuscules et les minuscules
Comment implémenter la pagination dans GraphQL (pour ruby)
Comment compresser un fichier JAVA CSV et le gérer dans un tableau d'octets
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
Comment entrer / sortir des fichiers mainframe IBM en Java?
[Ruby On Rails] Comment réinitialiser DB dans Heroku
Comment lancer une autre commande dans un programme Ruby
Comment mettre en évidence la syntaxe d'un fichier comme Dockerfile.production avec Pycharm
(Ruby on Rails6) Comment créer un modèle et une table
Comment lancer Swagger UI et Swagger Editor dans Docker
Comment résoudre l'erreur SSL_connect dans le SDK PayPal Ruby
Comment gérer les images téléchargées
Comment utiliser le retour Ruby
[Ruby] Comment commenter
Ruby: Comment utiliser les cookies
Comment gérer les instances
Comment restaurer le fichier de migration
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Comment séparer les mots dans les noms dans les classes, les méthodes et les variables
[Forge] Comment enregistrer votre propre Entité et Entité Render dans 1.13.2
Comment changer une chaîne dans un tableau en un nombre dans Ruby
[Rails] Comment définir des macros dans Rspec et standardiser le traitement
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment développer et enregistrer une application Sota en Java
Comment installer les pilotes PHP 7.4 et SQL Server dans CentOS 7.7
Comment vérifier l'extension et la taille des fichiers téléchargés
Comment inclure PKCE Code_Verifier et Code_Challenge dans la requête JMeter
Comment basculer dynamiquement entre FIN et RST dans Netty
Comment gérer différentes versions de rbenv et Ruby
Comment utiliser Lombok au printemps
Comment utiliser StringBurrer et Arrays.toString.
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment exécuter JUnit dans Eclipse