【发布时间】:2014-08-11 00:57:19
【问题描述】:
上下文
目前我正在研究大型数字档案。根据法律,这些档案应保存 20 至 70 年左右。我的研究是关于如何使用企业搜索解决方案检索这些档案中的文档。在我可以对这些档案做任何事情之前,应该将它们复制到本地存储中。大多数档案都通过 USB 驱动器和记忆棒发送给我。档案大小在 4GB 到 250GB 之间。与此同时,我正在学习编写 python 来编写搜索解决方案的脚本。
问题
由于深度嵌套的目录和文件,复制文件和目录是有问题的。很多文件或目录的名称都很长(有时超过 255 个字符,Windows 仍然会卡住)。
解决方案
编写一个 Python 脚本,该脚本递归地删除文件夹和文件名中的所有空格,以将这些空格缩短到 255 个字符以下。同样为了保留旧名称,新名称将采用驼峰式命名。
问题
我编写了一个脚本来删除空格和 camelCase 文件和文件夹名称。但它仅适用于所选目录;它不是递归的。我尝试了os.walk 函数,但我似乎无法用os.walk 实际更改名称。使用os.listdir 我可以更改名称,但我不明白如何递归地进行操作。那么如何使用 Python 递归地重命名文件和文件夹呢?
代码
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))
【问题讨论】:
-
@jonrsharpe 感谢您编辑我的问题,英语不是我的母语。因此,感谢您帮助澄清问题。
标签: python windows recursion filenames directory