来自 python 的完整 rust 初学者。我想使用 rust-polars 来读取压缩的 GTF (*.gtf.gz) 文件:
let schema = Arc::new(Schema::new(vec![
Field::new("contigName", DataType::Categorical),
Field::new("source", DataType::Utf8),
Field::new("feature", DataType::Categorical),
Field::new("start", DataType::Int64),
Field::new("end", DataType::Int64),
Field::new("score", DataType::Float32),
Field::new("strand", DataType::Categorical),
Field::new("frame", DataType::Categorical),
Field::new("attribute", DataType::Utf8),
]));
let mut df = CsvReader::from_path(r).unwrap()
.with_delimiter(b'\t')
.with_schema(&schema)
.with_comment_char(Some(b'#'))
.with_n_threads(Some(1)) // comment for multithreading
.with_encoding(CsvEncoding::LossyUtf8)
.has_header(false)
.finish()?;
let test = df.head(Some(10));
println!("{}", test);
但是,我最终遇到了一些问题:
- 如何告诉 Polars 文件已压缩?
我尝试传递io::BufReader::new(GzDecoder::new(f))
而不是文件,但失败了。 - 如何解析分类列?
- 如何处理可能丢失或附加的列?
- 如何读取以“#”为标题、以“##”为注释的文件?