最近的一些日子瞳腌,對Go語言比較感興趣绞铃,然后就開始了學習。之所以對Go語言比較感興趣嫂侍,主要是發(fā)現工作的時候儿捧,常常需要我寫一些腳本,而且需要跨平臺挑宠,而且最好是開發(fā)簡單菲盾、部署簡單。然后各淀,就發(fā)現Go語言其實是比較適合這個場景的懒鉴。
今天在處理文件,想把照片上傳到百度的“一刻相冊”碎浇,但是呢临谱,它每次限制上傳一百,下載頁限制到一百奴璃,如果這樣的話悉默,我直接本地多建幾個目錄,不就便于維護了嘛苟穆。
簡單的想法就是把一個目錄里的文件抄课,按某個數量級,直接拷貝到一個新的目錄里鞭缭,然后編譯成一個exe文件剖膳,配置到環(huán)境變量就好了。
這里簡單的寫了一下:
package main
// 1.根據文件數量岭辣,創(chuàng)建對應目錄
// 2.遍歷文件數組吱晒,拷貝文件到對應目錄
import (
"flag"
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
args := flag.Args()
var targetDir string
flag.StringVar(&targetDir, "dir", "", "文件路徑")
flag.Parse()
if args == nil {
fmt.Println("請輸入正確參數!格式為: -dir 文件路徑")
return
}
fmt.Println("啟動照片梳理腳本:")
fmt.Println(targetDir)
files, err := ioutil.ReadDir(targetDir)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Println("當前目錄下文件數量:", len(files))
fmt.Println("------------------------------------")
if len(files) < 80 {
fmt.Println("文件數量小于80沦童,無需打包")
} else {
fmt.Println("檢測到文件數量大于80仑濒,開始進行歸檔")
fmt.Println("創(chuàng)建目錄叹话,收納照片到對應文件,每個目錄保存80張圖片")
dir_cnt := len(files)/80 + 1
for j := 0; j < dir_cnt; j++ {
pathName := targetDir + `\` + fmt.Sprintf("photo_%d", j)
fmt.Printf("創(chuàng)建目錄:%s", pathName)
err = os.Mkdir(pathName, os.ModeDir)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("拷貝文件:")
start := j * 80
end := start + 80
if end > len(files) {
end = len(files)
}
temps := files[start:end]
for _, j := range temps {
fname := j.Name()
if strings.HasSuffix(fname, "exe") {
} else if strings.HasSuffix(fname, "JPG") || strings.HasSuffix(fname, "MP4") || strings.HasSuffix(fname, "png") || strings.HasSuffix(fname, "jpg") {
fmt.Println(fname)
os.Rename(targetDir+`\`+fname, pathName+`\`+fname)
} else {
fmt.Println("異常格式墩瞳,跳過驼壶!")
}
}
}
}
fmt.Println("處理完成!")
}
編譯處理后的Exe文件:
https://www.123pan.com/s/UlhZVv-RVSsH.html提取碼:67YI
使用:
imgs.exe -dir D:\photo\202301\ # 照片路徑
一些想法:
- 寫的腳本喉酌,不能坑人热凹,剛開始寫,忘記檢測文件結尾了泪电,嗯般妙,萬一弄錯了,可能帶來一些毀滅相速。
- 異常處理碟渺,很多時候必須考慮,比如參數的檢測突诬,目錄的檢測苫拍,文件類型的檢測等等。
- 想更快的學習一門語言旺隙,還是需要一些練習绒极,實際應用中,才能發(fā)現不足蔬捷,提升能力集峦。