【问题标题】:Renaming Script in Ruby在 Ruby 中重命名脚本
【发布时间】:2023-03-13 01:43:02
【问题描述】:

我正在尝试编写我的第一个 Ruby 脚本,该脚本将重命名特定文件夹中的文件。我的脚本基于此响应:How to rename a file in Ruby?。但是,我需要帮助来详细说明一些事情。这是我目前写出的上述链接中的代码。

puts "Renaming files..."

folder_path = "/Desktop/untitled/"

Dir.glob( folder_path + "*" ).sort.each do |f|
  filename = File.basename(f, File.extname(f))
  File.rename( f, folder_path + filename.capitalize + File.extname(f))
end

puts "Renaming complete."

通过这个示例,我了解到脚本只是将原始文件的名称大写。但是,如果我想在文件名中插入一个段,我该怎么办。比如说我有: “这是我的名字。”

写出来。如果我只想专注于“我的名字”部分,并将其更改为以下内容,我会怎么做:

"This is my (first) name."

另外,如果我想删除一个空格怎么办:

"This is myfirstname."

非常感谢!

【问题讨论】:

  • 这与文件无关。这些是基本的字符串操作。
  • 好的,抱歉,我真的是 Ruby 新手。或任何与此相关的编程。

标签: ruby


【解决方案1】:

如果你想用其他东西替换文件名的一部分,你应该使用String类的subgsub函数:

filename = File.basename(f, File.extname(f))

现在在文件名中你已经存储了一个String 代表当前文件的名称。你可以使用Object 类的instance_of? 函数来检查它,如果你好奇的话:

filename.instance_of?(String)
# -> true

你应该做的是使用gsub 方法来替换给定字符串的所有出现,或者sub 只替换它的第一个。 Here你可以找到使用这些功能的详细信息。

我想在你的情况下这应该可以解决问题:

filename.gsub('my name', 'my (first) name')
# 2nd question:
filename.gsub("my first name", "myfirstname")

此外,subgsub 方法中允许使用正则表达式。如果您想编写更复杂的模式,您应该尝试一下,例如从文件中删除所有数字。

【讨论】:

  • 对于第二个问题,您将整个字符串更改为无空格。但是,如果我只想取消部分字符串的空格,我会怎么做?我了解 lstrip 和 rstrip 处理结尾和开头,但我不确定如何编辑中间。这是一个示例:“我的名字是 Bob”到“我的名字是 Bob”。所以我会考虑对 .gsub "first name", "firstname" 做同样的事情,但是如果我想先将字符串更改为 f 然后继续呢? Likeso:“我的名字是 Bob”到“我的名字是 Bob”
  • "我的名字是 Bob".gsub('first', 'f') => 我的名字是 Bob。但我想删除 f 和 name 之间的空格。
  • "My first name is Bob".gsub('first name', 'fname') "My fname is Bob" 或者如果字符串在filename 中,另一个替代是firstname['first name'] = 'fname'
【解决方案2】:

在 Ruby 中创建带有变量的字符串的好方法是:

first = "Eugene"
filename = "This is my #{first} name"

文件名等于“这是我的尤金名字”

所以对于您询问的文件部分:

"This is my #{folder_path}#{filename.gsub!(' ', '').capitalize}#{File.extname(f)}"

可以使用 gsub 删除空格 (查看字符串类文档http://www.ruby-doc.org/core-1.9.3/String.html):

filename.gsub(' ', '')

您还可以使用 File classes join 方法将字符串连接到路径中,并避免使用斜杠('/' vs '\')的跨平台问题 更多内容见http://www.ruby-doc.org/core-1.9.3/File.html#method-c-join

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2021-07-04
    相关资源
    最近更新 更多