0

そのため、名前の付いたサブフォルダー内にあるファイルのリストを反復処理し、ファイルの名前を管理するサブフォルダーeachjpgfileにファイルを変更しようとしていますが、これを行うと、ファイルを保持するのではなく、前にディレクトリに追加します。以下のコードを見ると、なぜこれを行っているのか、またそれをディレクトリに保持するにはどうすればよいのかがわかりますか?doceachjpgfileeachjpgfileeachjpgfile

コードは次のとおりです。

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」を使用していると思います。
私が知る限り、あなたが渡している「各jpgファイル」はフルパスであるため、ファイル名の「doc」を「/フル/パス/to/各jpgファイル」に置き換えています。現在の作業ディレクトリに関係なく、「各jpgfile」ディレクトリ。

置換の前にパス/ファイル名を分割する行を追加できます。

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 に答える