0

所以我试图遍历一个名为的子文件夹中的文件列表,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)
4

2 回答 2

1

试试这个:

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
于 2012-05-14T23:58:40.593 回答
1

这里发生了很多奇怪的事情,但我认为导致您的特定问题的原因是在“eachfile.replace”中使用“eachjpgfile”。
据我所知,您传入的“每个jpgfile”是一个完整路径,因此您将文件名中的“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)

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

于 2012-05-15T00:14:34.230 回答