我有两个文本文件。其中一个包含以下列表:
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
答案 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中总是有不止一种方法可以做,而有时需要紧凑,富有表现力的代码。您的里程可能会有所不同。