MrD*_*ase 15 ruby file-io prepend
我想用Ruby添加一行到Ruby的文件顶部:
# initial file contents
something
else
# file contents after prepending "hello" on its own line
hello
something
else
Run Code Online (Sandbox Code Playgroud)
以下代码只是替换整个文件的内容:
f = File.new('myfile', 'w')
f.write "test string"
Run Code Online (Sandbox Code Playgroud)
the*_*Man 22
这是一项非常常见的任务:
original_file = './original_file'
new_file = original_file + '.new'
Run Code Online (Sandbox Code Playgroud)
设置测试:
File.open(original_file, 'w') do |fo|
%w[something else].each { |w| fo.puts w }
end
Run Code Online (Sandbox Code Playgroud)
这是实际的代码:
File.open(new_file, 'w') do |fo|
fo.puts 'hello'
File.foreach(original_file) do |li|
fo.puts li
end
end
Run Code Online (Sandbox Code Playgroud)
将旧文件重命名为安全的文件:
File.rename(original_file, original_file + '.old')
File.rename(new_file, original_file)
Run Code Online (Sandbox Code Playgroud)
证明它有效:
puts `cat #{original_file}`
puts '---'
puts `cat #{original_file}.old`
Run Code Online (Sandbox Code Playgroud)
哪个输出:
hello
something
else
---
something
else
Run Code Online (Sandbox Code Playgroud)
您不想尝试将文件完全加载到内存中.这将一直有效,直到你得到一个比你的RAM分配更大的文件,并且机器会爬行,或者更糟糕的是,崩溃.
相反,逐行阅读.读取单个行仍然非常快,并且可扩展.您必须在驱动器上有足够的空间来存储原始文件和临时文件.
fwiw这似乎有效:
#!usr/bin/ruby
f = File.open("myfile", "r+")
lines = f.readlines
f.close
lines = ["something\n"] + lines
output = File.new("myfile", "w")
lines.each { |line| output.write line }
output.close
Run Code Online (Sandbox Code Playgroud)
小智 6
正如有些人所说,可能不要将它用于较大的文件,但这是一个简单的开始。
rd = IO.read 'myfile'
IO.write 'myfile', "hello\n" + rd
Run Code Online (Sandbox Code Playgroud)
我想出了类似这样的东西,它比我见过的其他解决方案更具描述性,也更加隐晦:
def file_prepend(file, str)
new_contents = ""
File.open(file, 'r') do |fd|
contents = fd.read
new_contents = str << contents
end
# Overwrite file but now with prepended string on it
File.open(file, 'w') do |fd|
fd.write(new_contents)
end
end
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它:
file_prepend("target_file.txt", "hello world!\n")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10599 次 |
| 最近记录: |