gpt4 book ai didi

ruby 简单替换

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:32 24 4
gpt4 key购买 nike

Ruby 新手,遇到过以下情况。我有一个文件,其中的值由换行符分隔,它们看起来像这样:

18917
18927
18929
...

我想为所有文件添加一个文件夹路径,然后抓取前 2 个字符并将其添加到前面,然后是文件中的值,然后在末尾添加一个“.jpg”,这样它们最终会查找像这样:

路径/to/foler/18/18917.jpg

所以我编写了这个 ruby​​ 代码:

folder = "/path/to/folder" 
lines = File.readlines("values.csv")
images = lines.collect.to_s.gsub("\n", ".jpg,")
images.split(',').collect { |dogtag | puts "bad dog: #{folder}/#{dogtag[0,2]}/#{dogtag}" }

现在,这几乎可以工作了,不工作的部分是抓取前 2 个字符。我也尝试使用引号外的方法(当然没有#{})但它只会产生一个空结果。

有人可以指出我的愚蠢吗?

最终我想删除这些图像,但我猜想将上面的“puts”替换为“File.delete”会成功吗?

像往常一样,提前感谢您抽出时间查看此内容。

最佳答案

您似乎没有理解 collect 的作用。

我会像这样重写您的代码段:

File.read("values.csv").each do |line|
puts "bad dog: /path/to/folder/#{line[0,2]}/#{line.chomp}.jpg"
end

-- 最后一条评论的更新:--

如果您不想在删除文件之前使用 if 语句检查文件是否存在,您有两个选择 (AFAIK)。

使用救援:

File.read("values.csv").each do |line|
begin
File.delete "/path/to/folder/#{line[0,2]}/#{line.chomp}.jpg"
rescue Errno::ENOENT
next
end
end

或者使用 delete_if_exists 方法扩展 File 类。您可以将其放在脚本的顶部:

class File
def self.delete_if_exists(f)
if exists?(f)
delete(f)
end
end
end

有了它,您可以:

File.read("values.csv").each do |line|
File.delete_if_exists "/path/to/folder/#{line[0,2]}/#{line.chomp}.jpg"
end

关于ruby 简单替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com