gpt4 book ai didi

python-2.7 - 如何在 Golang 中重命名不同目录中的一组文件

转载 作者:IT王子 更新时间:2023-10-29 01:57:05 24 4
gpt4 key购买 nike

我用 Python 2.7 编写了一个程序,通过替换文件名中的数字来重命名目录中的文件。我试图用 Golang 应用程序做同样的事情,但它不起作用。控制台仍会提供新名称,但不会更改文件目录中照片的名称。

这是python程序

import os
def rename_files():
#(1) get files names from a folder
file_list = os.listdir(r"C:\\Users\\g\\Desktop\\Fun\\udacity\\foundationsofpython\\07finalrenamingapp\\prank")
print(file_list)
saved_path = os.getcwd()
print (saved_path)
os.chdir(r"C:\\Users\\g\\Desktop\\Fun\\udacity\\foundationsofpython\\07finalrenamingapp\\prank")

#2 rename all files names in folder
for file_name in file_list:
print ("Old Name - " +file_name)
print ("New Name - " +file_name.strip("0123456789"))
os.rename(file_name,file_name.strip("0123456789"))
os.chdir(saved_path)

rename_files()

这很好用。然而,这个 Golang 脚本并没有这是 Golang 程序

package main

import (
"log"
"os"
"fmt"
"regexp"
)
func readCurrentDir() {
dir := "C:\\Users\\g\\Desktop\\prank"
file, err := os.Open(dir)
if err != nil {
log.Fatalf("failed opening directory: %s", err)
}
defer file.Close()

list,_ := file.Readdirnames(0) // 0 to read all files and folders
for _, name := range list {
oldName := name
fmt.Println("Old Name - ", oldName)
re := regexp.MustCompile( "[^A-za-z]" )
newName := re.ReplaceAllString( oldName, " ")
fmt.Println("New Name - ", newName)
os.Rename(dir+oldName, dir+newName)
fmt.Println("File names have been changed")

}
}

func main() {
readCurrentDir()

}

如果您想将这些图片从 github 存储库拉到项目中,这里有一个链接,该链接将为您提供代码和存储图像的照片文件夹。通过查看我的代码需要更改的位置,我将受益最大。如果您能提供任何帮助或建议,我们将不胜感激。非常感谢。

Python 应用程序 https://github.com/lashleykeith/GoingwithGolang/tree/master/OldCode2BeChanged

Go 语言应用 https://github.com/lashleykeith/GoingwithGolang/tree/master/our_tutorial/5finalrenamingapp

最佳答案

在 Go 中,总是,总是,检查错误。您的许多问题将变得显而易见。例如,您有 os.Rename 错误。

使用 filepath 包来操作文件名路径。编译常量 regex 表达式应该只进行一次。修复您的 regexp 错误:"[^A-za-z]" 应该是 "[^A-Za-z]"

这是一个工作版本:

package main

import (
"fmt"
"log"
"os"
"path/filepath"
"regexp"
)

func readCurrentDir() {
dir := "C:\\Users\\g\\Desktop\\prank"
file, err := os.Open(dir)
if err != nil {
log.Fatalf("failed opening directory: %s", err)
}
defer file.Close()

list, err := file.Readdirnames(0) // 0 to read all files and folders
if err != nil {
log.Fatalf("failed reading directory: %s", err)
}
re := regexp.MustCompile("[^A-Za-z]")
for _, name := range list {
oldName := name
fmt.Println("Old Name - ", oldName)
newName := re.ReplaceAllString(oldName, " ")
fmt.Println("New Name - ", newName)
err := os.Rename(filepath.Join(dir, oldName), filepath.Join(dir, newName))
if err != nil {
log.Printf("error renaming file: %s", err)
continue
}
fmt.Println("File names have been changed")
}
}

func main() {
readCurrentDir()
}

输出:

Old Name -  prankster.42.txt
New Name - prankster txt
File names have been changed

差异:

> git diff old.go new.go
diff --git a/old.go b/new.go
index 464b60e..7ae276e 100644
--- a/old.go
+++ b/new.go
@@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
+ "path/filepath"
"regexp"
)

@@ -15,69 +16,31 @@ func readCurrentDir() {
}
defer file.Close()

- list, _ := file.Readdirnames(0) // 0 to read all files and folders
+ list, err := file.Readdirnames(0) // 0 to read all files and folders
+ if err != nil {
+ log.Fatalf("failed reading directory: %s", err)
+ }
+ re := regexp.MustCompile("[^A-Za-z]")
for _, name := range list {
oldName := name
fmt.Println("Old Name - ", oldName)
- re := regexp.MustCompile("[^A-za-z]")
newName := re.ReplaceAllString(oldName, " ")
fmt.Println("New Name - ", newName)
- os.Rename(dir+oldName, dir+newName)
+ err := os.Rename(filepath.Join(dir, oldName), filepath.Join(dir, newName))
+ if err != nil {
+ log.Printf("error renaming file: %s", err)
+ continue
+ }
fmt.Println("File names have been changed")
-
}
}

func main() {
readCurrentDir()
-
}
>

关于python-2.7 - 如何在 Golang 中重命名不同目录中的一组文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49972363/

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