recursion重命名文件和文件夹

上下文

目前我正在研究大数字档案。 根据法律,这些档案应该在未来20到70年左右保存下来。 我的研究是关于如何使用企业search解决scheme来检索这些档案中的文档。 在我可以对这些档案做任何事情之前,他们应该被复制到本地存储。 大多数档案在USB驱动器和支架上到达我。 档案大小在4GB到250GB之间。 在此期间,我正在学习编写python以便能够编写search解决scheme。

问题

由于深层嵌套的目录和文件,复制文件和目录是有问题的。 很多文件或目录名称相当长(有时超过255个字符的Windows依然窒息)。

编写一个Python脚本,recursion地删除文件夹文件名中的所有空格,将其缩短到255个字符以下。 还要保留旧的名字,新的名字将被骆驼命名。

我写了一个脚本来删除空格和camelCase文件和文件夹名称。 但它只适用于所选的目录; 它不是recursion的。 我尝试了os.walkfunction,但我似乎无法用os.walk实际更改名称。 随着os.listdir我可以改变名称,但我不明白如何recursion。 那么如何用Pythonrecursion地重命名文件和文件夹呢?

 import os current_path = os.getcwd() # testing only print current_path path = "k:/test3/" os.chdir(path) current_path = os.getcwd() print current_path # testing only new_filename= "" #filenames = os.walk(path, topdown=False) # all print statusses should be rewritten to lines in log files. filenames =os.listdir(path) print filenames for filename in filenames: print "\nOldname: \n" +filename new_filename = filename.lower().strip() #make sure all filenames are in lowercase and cut whitespace on both ends. if " " in filename: #test for spaces in file or foldername fn_parts= [w.capitalize() for w in filename.split()] print "The parts are: " print fn_parts new_filename="" #empty new_filename after last iteration new_filename=new_filename.join(fn_parts) print "New filename: \n"+new_filename + "\n" os.rename(os.path.join(path, filename), os.path.join(path, new_filename)) else: new_filename=new_filename.title() print "New filename: \n"+new_filename + "\n" os.rename(os.path.join(path, filename), os.path.join(path, new_filename)) 

我在python上的经验是在linux上,但也许你可以通过该驱动器的glob迭代

https://docs.python.org/2/library/glob.html

并使用shutil移动或复制文件到一个新的位置?

https://docs.python.org/2/library/shutil.html

两者都非常简单易用,但是如果使用它们有一个特定的问题,那么在这两个库上,堆栈溢出已经有了大量的答案。

祝你好运!

不确定为此但使用os.walk更改代码可能会帮助你,希望如此。

 import os current_path = os.getcwd() # testing only print current_path path = "k:/test3/" os.chdir(path) current_path = os.getcwd() print current_path # testing only new_filename= "" #filenames = os.walk(path, topdown=False) # all print statusses should be rewritten to lines in log files. filenames =os.listdir(path) print filenames for dir,subdir,listfilename in os.walk(path): for filename in listfilename: print "\nOldname: \n" +filename new_filename = filename.lower().strip() #make sure all filenames are in lowercase and cut whitespace on both ends. if " " in filename: #test for spaces in file or foldername fn_parts= [w.capitalize() for w in filename.split()] print "The parts are: " print fn_parts new_filename="" #empty new_filename after last iteration new_filename=new_filename.join(fn_parts) print "New filename: \n"+new_filename + "\n" os.rename(os.path.join(dir, filename), os.path.join(path, new_filename)) else: new_filename=new_filename.title() print "New filename: \n"+new_filename + "\n" os.rename(os.path.join(path, filename), os.path.join(path, new_filename))