合并Ruby中的两个文本文件

时间:2015-09-29 10:46:14

标签: ruby merge

我有两个文本文件。其中一个包含以下列表:

dog
cat
horse

另一个有这个:

kennel
flap
shoes

我想将这两个文本文件合并到一个新的文本文件中,以便将这些术语列在彼此旁边,如下所示:

dog kennel
cat flap
horse shoes

我该怎么做呢?这是我的代码到目前为止,但它很大程度上是错误的:

f1 = File.readlines('C:\\Users\\USERNAME\\Desktop\\hat.txt')
f2 = File.readlines('C:\\Users\\USERNAME\\Desktop\\sat.txt')

File.open('file3.txt','w') do |output_file|

    f1.zip(f2) do |a,b|
        output_file.puts f1,f2
    end

end

3 个答案:

答案 0 :(得分:2)

而不是

from docx import Document

document = Document()
document.add_paragraph('<html><body>Some HTML</body></html>')
document.save('html.docx')

DO

output_file.puts f1, f2

答案 1 :(得分:1)

# get the data
f1 = File.readlines('./text1.txt')
f2 = File.readlines('./text2.txt')

# remove the newlines
f1 = f1.map {|elem| elem.chomp}
f2 = f2.map {|elem| elem.chomp}

File.open('file3.txt', 'w') do |output_file|
  #enumerate over the array length (take advantage of same size for both arrays)
  f1.each_with_index do |elem, i|

  # output the string interpolation
  output_file.puts "#{elem} #{f2[i]}"
  end

end

答案 2 :(得分:0)

在块闭包内合并,加上返回值

您可以使用File#open的块语法为处理合并的方法链创建闭包。在最里面的块中,您可以利用Enumerable#flat_map将遍历集合(例如行数组)的事实,并且格式字符串插值也将接受数组参数。例如:

File.open('f3', ?w) do |f3|
  File.readlines('f1').
    zip(File.readlines 'f2').
    flat_map { |arr| ln = sprintf "%s %s\n" % arr.map(&:chomp); f3.print ln; ln }
end
#=> ["dog kennel\n", "cat flap\n", "horse shoes\n"]

现在这不仅可以为您提供有用的返回值,而且还可以将文件f1和f2正确地合并到名为f3的新文件中。鉴于您的语料库,此文件将包含:

  狗窝狗窝      猫皮瓣      马鞋

此外,此代码还将处理每个文件中每行多个单词的文件。如果f1包含“大狗”并且f2包含“鞋子和手榴弹”,则此代码将执行Do The Thing™并返回:

#=> ["big dog kennel\n", "cat flap\n", "horse shoes and hand grenades\n"]

这段代码可能过于聪明而牺牲了可读性,但展示了许多有用的Ruby功能(尤其是返回值的效用),您或其他人可能会觉得这些功能很有帮助。在Ruby中总是有不止一种方法可以做,而有时需要紧凑,富有表现力的代码。您的里程可能会有所不同。