我需要重命名刚创建的文件,但在类型扩展名之前

时间:2016-01-26 20:01:33

标签: ruby

我有以下变量:

filepath = "test.tmx"

我需要在生成的文件名的末尾添加_out,但在扩展名之前。到目前为止,我写过这个,但这是不正确的:

File.open(filepath+"-"+language_code+"_out", "w")

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

首先,将文件extensionbasename提取到几个变量中:

# Get the file extension
ext = File.extname(filepath)

# Get the file's basename (without extension)
basename = File.basename(filepath, '.*')

然后您可以使用它们构建新文件名:

File.open(basename + language_code + '_out' + ext, 'w')

答案 1 :(得分:0)

解析您的文件名,使用标准库File将基数与扩展名分开,然后重新判断。

这应该有效:

languages_list = ["es-AR", "es-CL", "es-CO", "es-MX", "es-PE"]
filepath = "adidas_174_Generic.tmx"
text = File.read(filepath)

languages_list.each do |language_code|
  puts language_code
  replace = text.gsub('<tuv xml:lang="es-PA">', "<tuv xml:lang=\"#       {language_code}\">")

  file_base = File.basename filepath, ".*"
  file_extension = File.extname filepath

  new_file_path = file_base+language_code+"_out"+file_extension

  File.open(new_file_path, "w") {|file| file.puts  replace}

答案 2 :(得分:-1)

您编辑过的问题的答案很简单。

filepath = "test.tmx"
filepath_before_extension = File.basename(filepath, '.tmx')
# => "test"

puts "#{filepath_before_extension}_out.tmx"
# => test_out.tmx

或者:

puts filepath.sub(/\.tmx$/, '_out.tmx')
# => test_out.tmx

原始问题的答案稍微复杂一些。

如果我理解正确,您尝试合并filepathlanguage_code以形成如下文件名:

adidas_174_Generic-en-AR_out.tmx

...而是你得到了这个:

adidas_174_Generic.tmx-en-AR_out

在这种情况下,它是相同的,除了你将language_code添加到输出:

language_code = "es-AR"
filepath = "adidas_174_Generic.tmx"
filepath_before_extension = File.basename(filepath, '.tmx')
# => "adidas_174_Generic"

puts "#{filepath_before_extension}-#{language_code}_out.tmx"
# => adidas_174_Generic-es-AR_out.tmx

或者:

puts filepath.sub(/\.tmx$/, "-#{language_code}_out.tmx")
# => adidas_174_Generic-es-AR_out.tmx