【Rust】gzip圧縮されたテキストファイルの読込み・書込み
flate2を使ってgzip圧縮されたテキストファイルの読込みと書込みを行います。
[package]
name = "gzip-sample"
version = "0.1.0"
edition = "2021"
[dependencies]
flate2 = "1.0.35"
use std::{
error::Error,
fs::File,
io::{BufRead, BufReader, BufWriter, Write},
};
use flate2::{bufread::MultiGzDecoder, write::GzEncoder, Compression};
fn main() -> Result<(), Box<dyn Error>> {
//ファイルを読み込む
let input_file = File::open("uuid_lower.txt.gz")?;
let reader = BufReader::new(input_file);
let decoder = MultiGzDecoder::new(reader);
let reader = BufReader::new(decoder);
//一行ごとに読み込みながら大文字に変換する
let mut upper_uuids = Vec::new();
for result in reader.lines() {
let line = result?;
upper_uuids.push(line.to_uppercase());
}
//ファイルに書き込む
let output_file = File::create("uuid_upper.txt.gz")?;
let writer = BufWriter::new(output_file);
let encoder = GzEncoder::new(writer, Compression::default());
let mut writer = BufWriter::new(encoder);
for uuid in upper_uuids.iter() {
let line = format!("{}\n", uuid);
writer.write(line.as_bytes())?;
}
Ok(())
}
uuid_lower.txt.gzには100万件のUUID文字列が入っています。
各UUIDを大文字に変換してuuid_upper.txt.gzに出力する処理を行っています。