0

我现在要在 Ruby 中操作大文件。

我要做的是将标题行添加到一个千兆字节大小的文件中,该文件包含一系列没有换行符的字符,并将结果输出到一个新文件中。(如下示例所示)。序列中的每个位置都可以有四个字符之一(a、c、g、t)

我的问题是

  1. 我应该以二进制文件还是文本文件的形式打开千兆字节大小的文件和输出文件?

  2. 我想知道一个示例代码。(如果可能的话,我不想一次将千兆字节大小的文件的所有数据加载到我的计算机内存中。)

谢谢。


示例 假设程序名称为 add-header-giga(第一个参数是 header-line,第二个参数指定输入文件名。输出文件名是 output-file)

>cat 千兆字节大小文件.txt
cctgcaggagcagagcaaagaggtggccatccgcatctttcgggctgccagtttcgctcctggaggctgtgcag....


>add-header-giga DNA-sequence-from-Homo-Sapiens giga-byte-size-file.txt


>cat 输出文件
来自智人的 DNA 序列
cctgcaggagcagagcaaagaggtggccatccgcatctttcgggctgccagtttcgctcctggaggctgtgcag....
4

3 回答 3

2

如果没有换行符,那没关系。二进制与文本仅在对换行符的处理上有所不同。

于 2012-11-05T12:22:45.640 回答
1

这样的事情可能会完成这项工作:

# Here you should check if you arguments are valid first

header = "#{ARGV[0]}\n"
file_to_read = ARGV[1]
file = IO.read(file_to_read)
open(file_to_read, 'w') { |f| f << header << file} 
于 2012-11-05T10:22:28.510 回答
1
....

outf = File.open("tagged_file.out", "w")
outf.write(hdr)

CHUNK = 65536
File.open(file_to_read, "r") do |inf|
    while buf = inf.read(CHUNK)
      outf.write(buf)
    end
end
于 2012-11-05T15:36:03.503 回答