In diesem Artikel habe ich die Grundkenntnisse zum Umgang mit TSV- und CSV-Dateien in Ruby zusammengefasst, als wäre es mein Memo. Vor TSV und CSV möchte ich die File-Klasse gemeinsam überprüfen.
Datei mit Daten, die durch Tabulatoren getrennt sind
Datei mit durch Kommas getrennten Daten (,)
meibo.txt
john m 18
paul m 20
alice f 15
dabid m 17
jasmin f 17
#
File.open("meibo.txt") do |file|
end
#
file = File.open("meibo.txt")
file.close
File.open("meibo.txt") do |file|
puts.file
end
Prozessschreibmethode 2 Die Verarbeitungsschreibmethode 1 schließt die Datei ohne Erlaubnis, auch wenn sie geöffnet ist. Bei Schreibmethode 2 bleibt die Datei jedoch geöffnet, sofern nicht die Methode "close" verwendet wird. Also persönlich schreibe ich gerne 1. Wenn Sie beispielsweise die oben genannten Schritte ausführen, erhalten Sie die Standardausgabe des Dateiobjekts wie folgt.
<File:0x00007fba4497ea68>
Die geöffnete Datei wird gelesen.
File.open("meibo.txt") do |file|
p file.read
end
Dann ist die Standardausgabe wie folgt.
"john\tm\t18\npaul\tm\t20\nalice\tf\t15\ndabid\tm\t17\njasmin\tf\t17\n"
Sie können es plötzlich lesen.
file = File.read("meibo.txt")
p file
=>
"john\tm\t18\npaul\tm\t20\nalice\tf\t15\ndabid\tm\t17\njasmin\tf\t17\n"
Wenn Sie Zeile für Zeile lesen möchten, öffnen Sie die Datei einmal, lesen Sie sie Zeile für Zeile im Verarbeitungsteil und fügen Sie Ihre bevorzugte Verarbeitung wie unten gezeigt ein.
File.open("meibo.txt") do |file|
file.each do |line|
wird bearbeitet
end
end
# Zum Beispiel
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"
Das Obige ist, wie man es in der File-Klasse handhabt, aber da die Ausgabe eine Folge von Zeichenketten ist, denke ich, dass es ein wenig schwierig ist, damit umzugehen. Daher können Sie die Daten mithilfe der CSV-Klasse einfacher verarbeiten.
Ich denke, dass es ursprünglich eine Klasse für die Verarbeitung von CSV-Dateien ist, aber wenn Sie die Option col_sep
verwenden (durch die angegebene Zeichenfolge getrennt), können TSV-Dateien auch von der CVS-Klasse verarbeitet werden. Wenn Sie die CSV-Klasse verwenden, fügen Sie am Anfang der Zeile require" csv "
hinzu.
require "csv"
# Wenn Sie die offene Methode verwenden
CSV.open("meibo.txt", col_sep: "\t") do |tsv|
p tsv.read
end
# Wenn Sie die offene Methode nicht verwenden
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"]]
Beim Lesen mit der CSV-Methode wird das Ausgabeergebnis in einem Array zurückgegeben. Dies erleichtert die Handhabung als Daten. Wenn Sie Zeile für Zeile lesen möchten, verwenden Sie die folgende Methode "foreach".
require "csv"
CSV.foreach("meibo.txt", col_sep: "\t") do |line|
wird bearbeitet
end
# Zum Beispiel
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"]
Auf diese Weise können Sie das Array für jede Zeile bearbeiten.
Übrigens können Sie natürlich auch eine neue CSV-Datei öffnen und darauf schreiben.
require "csv"
CSV.open("meibo.csv","w") do |line| #"w"Ist im Schreibmodus
line << ["michel","m",16]
end
meibo.csv
michel,m,16
Schließlich können Sie eine TSV-Datei mit der bisher eingeführten Syntax in eine CSV-Datei konvertieren. Plötzlich lautet die Schlussfolgerung wie folgt.
require "csv"
CSV.open('meibo.csv', 'w') do |csv|
CSV.foreach("meibo.txt", col_sep: "\t") do |line|
csv << line
end
end
Bereiten Sie zunächst eine CSV-Datei im Schreibmodus vor. Der Ablauf besteht darin, jede Zeile der TSV-Datei einzeln mit "foreach" in der CSV-Datei zu speichern. Sie können das Gegenteil von CSV zu TSV tun.
Anfangs habe ich die File-Klasse nicht ein wenig verstanden, aber ich konnte sie beim Schreiben dieses Artikels in meinem Kopf organisieren, sodass ich sie weiterhin verwenden werde.
Recommended Posts