使用Python重命名同一目录中的文件

2024-10-03 09:07:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我尝试遍历一个名为eachjpgfile的子文件夹中的文件列表,并将文件从doc更改为子文件夹eachjpgfile,但当我这样做时,它会将文件添加到eachjpgfile之前的目录中,而不是将其保存在其中。看看下面的代码,您能看到它为什么要这样做吗?我如何将它保存在eachjpgfile目录中?在

代码如下:

for eachjpgfile in filelist:
    os.chdir(eachjpgfile)
    newdirectorypath = os.curdir
    list_of_files = os.listdir(newdirectorypath)
    for eachfile in list_of_files:
         onlyfilename = os.path.splitext(eachfile)[0]
         if onlyfilename == 'doc':
            newjpgfilename = eachfile.replace(onlyfilename,eachjpgfile)
            os.rename(eachfile, newjpgfilename)

Tags: 文件of代码in目录文件夹fordoc
2条回答

试试这个:

import os

path = '.'
recursive = False   # do not descent into subdirs

for root,dirs,files in os.walk( path ) :
    for name in files :
        new_name = name.replace( 'aaa', 'bbb' )

        if name != new_name :
            print name, "->", new_name
            os.rename( os.path.join( root, name),
                   os.path.join( root, new_name ) )

    if not recursive :
        break

这里有很多奇怪的东西,但是我认为导致你的特殊问题的是在'eachjpgfile'中使用'eachjpgfile'每个文件。替换'。
据我所知,您传递的'eachjpgfile'是一个完整路径,所以您将文件名中的'doc'替换为'/full/path/to/eachjpgfile',这使得它与'eachjpgfile'目录平行,而不管您当前的工作目录是什么。在

您可以在替换之前添加一行来拆分路径/文件名:

for eachjpgfile in filelist:
    os.chdir(eachjpgfile)
    newdirectorypath = os.curdir
    list_of_files = os.listdir(newdirectorypath)
    for eachfile in list_of_files:
         onlyfilename = os.path.splitext(eachfile)[0]
         if onlyfilename == 'doc':
            root, pathName= os.path.split(eachjpgfile) #split out dir name
            newjpgfilename = eachfile.replace(onlyfilename,pathName)
            os.rename(eachfile, newjpgfilename)

这是一个非常肮脏的脚本非常肮脏的修复。:)

相关问题 更多 >