2

これが私のバッチファイルの名前変更と移動スクリプトです

import os, re, shutil, random

mainpath = 'C:\\Users\\s3z\\Desktop\\pytest'
dirs = [d for d in os.listdir('.') if os.path.isdir(d)]

for index, name in enumerate(dirs):
    subpath = name
    os.chdir(name)
    images = [i for i in os.listdir('.') if i[-4:] in ('.png', '.jpg', 'jpeg')]
    basename = re.sub(r'\W+', '', name[0:10])
    randid = str(random.uniform(0,1))[-4:] 
    for index, f in enumerate(images):
        path = os.path.join(mainpath, subpath)
        if f[-4:] == 'jpeg':
            ext = '.jpeg'
        else:
            ext = f[-4:]
        os.rename(os.path.join(path, f), os.path.join(path, basename + '_' + randid + '_' + str(index) + ext) 
        shutil.move(f, '..\..\COMMON')
    os.chdir(os.pardir)

機能に問題がありos.rename()ます。スクリプトを実行すると、

  File "bulk_image_organizer.py", line 19
    shutil.move(f, '..\..\COMMON')
         ^
SyntaxError: invalid syntax

そして19行目を出すと

shutil.move(f, '..\..\COMMON')

もう一度実行してみてください。エラーは次のように変わります。

  File "bulk_image_organizer.py", line 19
    os.chdir(os.pardir)
     ^
SyntaxError: invalid syntax

しかし、os.rename()行を削除すると、スクリプトは正常に機能します。またos.rename()、次のようにforループでPythonインタープリターの行を実行すると

>>> for index, f in enumerate(images):
...     os.rename(os.path.join(path, f), os.path.join(path, "new" + st
r(index) + ".jpg"))
... 

正常に動作します。それで、私のスクリプトで何が起こっているのでしょうか?

4

1 に答える 1

9

os.rename問題はまたはとは関係ありませんos.chdir。前の行に閉じ括弧がありません:

os.rename(os.path.join(path, f),
          os.path.join(path, basename + '_' + randid + '_' + str(index) + ext) 
#                                                                             ^
于 2012-04-23T21:58:26.870 に答える