繁体   English   中英

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

[英]Renaming file in same directory using Python

所以我试图遍历一个名为eachjpgfile的子文件夹中的文件列表,并将文件从doc更改为子文件eachjpgfile文件, eachjpgfile文件的名称但是当我这样做时,它将文件添加到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)

尝试这个:

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

这里有很多奇怪的东西,但我认为导致你的特定问题的是在'eachfile.replace'中使用'eachjpgfile'。
据我所知,你传入的'eachjpgfile'是一个完整的路径,所以你用'/ full / path / to / eachjpgfile'替换文件名中的'doc',这使它与'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)

对于非常脏的脚本,这是一个非常脏的修复。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM