Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中递归循环文件结构和重命名目录_Python_Rename_Directory - Fatal编程技术网

如何在python中递归循环文件结构和重命名目录

如何在python中递归循环文件结构和重命名目录,python,rename,directory,Python,Rename,Directory,我想通过将最后一个字符改为小写(如果是字母)来重新命名目录 我是在我以前的帖子的帮助下做到这一点的(很抱歉,我重复了帖子,没有确认答案) 这段代码适用于文件,但我如何将其也适用于目录 import fnmatch import os def listFiles(dir): rootdir = dir for root, subFolders, files in os.walk(rootdir): for file in files: y

我想通过将最后一个字符改为小写(如果是字母)来重新命名目录

我是在我以前的帖子的帮助下做到这一点的(很抱歉,我重复了帖子,没有确认答案)

这段代码适用于文件,但我如何将其也适用于目录

import fnmatch
import os


def listFiles(dir):
    rootdir = dir
    for root, subFolders, files in os.walk(rootdir):
        for file in files:
            yield os.path.join(root,file)
    return


for f in listFiles(r"N:\Sonstiges\geoserver\IM_Topo\GIS\MAPTILEIMAGES_0\tiles_2"):
    if f[-5].isalpha():
        os.rename(f,f[:-5]+f[-5].lower() + ".JPG")
        print "Renamed " +  "---to---" + f[:-5]+f[-5].lower() + ".JPG"

问题是的默认设置是自上而下。如果在自上而下遍历时尝试重命名目录,则结果是不可预测的

尝试设置
os.walk
自下而上:

for root, subFolders, files in os.walk(rootdir,topdown=False):
def listDirs(dir):
    for root, subFolders, files in os.walk(dir, topdown=False):
        for folder in subFolders:
           yield os.path.join(root,folder)
    return
编辑

另一个问题是
listFiles()
返回的是文件而不是目录

此(未测试)子项从下至上返回目录:

for root, subFolders, files in os.walk(rootdir,topdown=False):
def listDirs(dir):
    for root, subFolders, files in os.walk(dir, topdown=False):
        for folder in subFolders:
           yield os.path.join(root,folder)
    return

请尽量避免在帖子中添加无关的注释和签名。您可能遇到的一个问题是,在遍历树时重命名目录可能会导致遍历失败(因为您可能尝试遍历已重命名的目录)。因此,您可能需要做的是列出所有需要重命名的目录,并在遍历之后使用单独的循环来重命名这些目录。谢谢您的提示。我不知道如何更改代码,只重命名目录而不重命名文件。我已经用ListDir替换了ListFile,但这不起作用。干杯,RobUse
子文件夹
而不是
文件
<代码>文件是文件列表,
子文件夹
是子目录列表。