3

将来の時間を節約するために、小さな名前変更プログラムを作成しようとしています。基本的に、私が指定したディレクトリを通過し、特定の基準を満たしている場合はファイルの名前を変更します。

私は必要なものを書きましたが、最初に理解できないバグがあります。

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

import os
import fnmatch

for file in os.listdir("""/Users/Desktop/TESTME"""):
    if fnmatch.fnmatch(file,'MISC*'):
        os.rename(file, file[4:12] + '-13-Misc.jpg')

実行しようとすると、次のようになります。

Traceback (most recent call last):
  File "/Users/Documents/Try.py", line 6, in <module>
    os.rename(file, file[4:12] + '-13-Misc.jpg')
OSError: [Errno 2] No such file or directory

私もこれを試しました:

if fnmatch.fnmatch(file,'MISC*'):
    fun = file[4:12] + '-13-Misc.jpg'
    os.rename(file, fun)

しかし、私は同じことを取得します。

ファイルをファイルとして認識していません。私はこれについて間違った方法で進んでいますか?

4

2 に答える 2

9

名前を変更しようとしているファイル名へのフルパスを含める必要があります。

import os
import fnmatch

directory = "/Users/Desktop/TESTME"
for file in os.listdir(directory):
    if fnmatch.fnmatch(file, 'MISC*'):
        path = os.path.join(directory, file)
        target = os.path.join(directory, file[4:12] + '-13-Misc.jpg'
        os.rename(path, target)

このos.path.join関数は、プラットフォームに適したディレクトリセパレータを使用して、パス要素を全体にインテリジェントに結合します。

于 2012-07-02T12:53:25.803 に答える
1

この関数os.listdir()は、指定されたディレクトリ内のファイルのファイル名のみを返し、フルパスは返しません。os.path.join(directory, file_name)ファイルのフルパスを再構築するために使用できます。

これはbashでも実行できます。

cd /Users/Desktop/TESTME/
for f in MISC*; do mv "$f" "${f:4:8}-13-Misc.jpg"; done
于 2012-07-02T12:53:15.443 に答える