所以我正在尝试遍历名为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)
答案 0 :(得分: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
答案 1 :(得分:1)
这里有很多奇怪的东西,但我认为引起你特殊问题的是在'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)
对于非常脏的脚本,这是一个非常脏的修复程序。 :)