契机:程序员再很多情况下,需要把同事给的文件,改成英文名,所有想写个
思路:查找文件夹下的全部中文文件,进行改英文名(通过百度翻译)
缺陷:百度翻译很差,同种中文带点数字,就导致翻译不一致,其实这个脚本用处不大(起码对我来说,并不能帮助我不需要改文件名的窘境)
扩展:1.也可以同时改文件夹,但文件夹会改变路劲,有很多办法解决,比如统计之后再改名,不想写,因为百度翻译无法,满足我。2.当然通过自建库,也·会提高效率,比如(翻译的背景是background,你可以直接bg),但太麻烦,得不偿失。
考虑平时中有人会使用到不同系统下的路径差异("/“或者”\")提供一个方法(我平时也是使用两种系统,工作一般是mac,所以是win的后续路径哪里改下,或者加入这个判断吧,我就不加了)
if(platform.system()=='Windows'):
print('Windows系统')
elseif(platform.system()=='Linux'):
print('Linux系统')
else:
print('其他')
由于模块装太多了,我这些都没装,我也不知道需要哪些模块,看报错自己装吧
import os
import sys
import http.client
import hashlib
import json
import urllib
import random
def list_all(dir_name):
for dirpath, dirnames, filenames in os.walk(dir_name):
for filename in filenames:
# 判定中文
if '\u4e00' <= dirname <= '\u9fff':
new_name = baidu_translate(filename)
src_path = dirpath + '/' + filename
dest_path = dirpath + '/' + new_name
print(src_path + '->' + new_name)
os.rename(src_path, dest_path)
# 百度翻译
def baidu_translate(content):
appid = “百度ID” 自己去申请 (免费的)
secretKey = “百度Key” 自己去申请 (免费的)
httpClient = None
myurl = '/api/trans/vip/translate'
q = content
fromLang = 'zh' # 源语言
toLang = 'en' # 翻译后的语言
salt = random.randint(32768, 65536)
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
# response是HTTPResponse对象
response = httpClient.getresponse()
jsonResponse = response.read().decode("utf-8")# 获得返回的结果,结果为json格式
js = json.loads(jsonResponse) # 将json格式的结果转换字典结构
dst = str(js["trans_result"][0]["dst"]) # 取得翻译后的文本结果
return dst # 打印结果
except Exception as e:
print(e)
finally:
if httpClient:
httpClient.close()
if __name__ == '__main__':
print(sys.argv)
if len(sys.argv) == 1:
print('must has name dir')
exit(-1)
if len(sys.argv) >= 2:
list_all(dir_name)
只改文件,没改文件夹,直接改文件夹会导致搜索路径发生改变,导致遍历失败,,,,先改文件,再改文件夹也是不行的(文件夹有多级目录),,,因为写完发现对我没用,没改进,,,提供个思路:保存需要改的路径,在根据高级目录先改名,再低级目录改名