【发布时间】:2023-04-07 12:55:01
【问题描述】:
可能是一个简单的问题,但我需要删除特定行号之后的文件内容?所以我不想保留前 5 行并删除文件的其余内容。我一直在寻找一段时间,但找不到这样做的方法,我是一名 iOS 开发人员,所以 Ruby 不是我非常熟悉的语言。
【问题讨论】:
可能是一个简单的问题,但我需要删除特定行号之后的文件内容?所以我不想保留前 5 行并删除文件的其余内容。我一直在寻找一段时间,但找不到这样做的方法,我是一名 iOS 开发人员,所以 Ruby 不是我非常熟悉的语言。
【问题讨论】:
这就是truncate。 truncate 方法需要字节位置,之后所有内容都会被截断 - 而File.pos 方法恰好提供了这一点:
File.open("test.csv", "r+") do |f|
f.each_line.take(5)
f.truncate( f.pos )
end
File.open 中的“r+”模式是读写模式,不会像“w+”那样将现有文件截断为零大小。
File.open 的块形式保证了块结束时文件是关闭的。
【讨论】:
我不知道有什么方法可以从文件中删除,所以我的第一个想法是读取文件然后写回它。像这样的:
path = '/path/to/thefile'
start_line = 0
end_line = 4
File.write(path, File.readlines(path)[start_line..end_line].join)
File#readlines 读取文件并返回一个字符串数组,其中每个元素是文件的一行。然后你可以使用subscript operator with a range 来写你想要的行
这对于大文件来说内存效率不是很高,所以如果你要这样做,你可能需要优化。
【讨论】: