0

ファイル名をインターネットに適したものにするために、ディレクトリ内のすべてのファイルの名前を変更して、各ファイルに複数の変更を加えようとしています。いくつかの置換では正しく機能し、ファイルが見つからないと表示されます。私はそれを遅くすればうまくいくと思っていましたtime.sleep()が、これは効果がないようです(遅いこと以外)。スクリプトを何度も実行して目的を達成できる場合もありますが、エラーなしで完了しても変更が行われない場合もあります。任意の提案をいただければ幸いです。

import os, glob, time
path  = os.getcwd()
dirlist = glob.glob('*.pdf')
for filename in dirlist:
    os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(' ', '_')))
    os.rename(os.path.join(path, filename), os.path.join(path, filename.lower().encode('utf8')))
    os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(' (', '-')))
    os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(')', '')))
    os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(',', '')))
    os.rename(os.path.join(path, filename), os.path.join(path, filename.replace('_-_', '-')))
4

2 に答える 2

3

filename.replace()新しい文字列を返します。ファイル名はまったく変更されません。そのため、ファイルの名前を変更するとファイル名が古くなり、次に使用するときにファイルが見つからないというエラーが発生します。

次のようなことを試してください:

import os, glob, time

def new_filename(filename):
    return filename.replace(' ', '_').lower().encode('utf8').replace(' (', '-') \
                   .replace(')', '').replace(',', '').replace('_-_', '-')

path  = os.getcwd()
dirlist = glob.glob('*.pdf')
for filename in dirlist:
    os.rename(os.path.join(path, filename), os.path.join(path, new_filename(filename)))
于 2013-05-25T06:02:33.777 に答える
0
usage = '''

$python slug_dir.py DIR

'''

from os import rename, walk
from os.path import join, isdir, splitext
from slugify import slugify


def rename_files(dir_path):
    for path, subdirs, files in walk(dir_path):
        for fname in files:
            filename, extension = splitext(fname)
            s = slugify(filename)
            newname = s+extension
            try:
                oldpath = join(path, fname)
                newpath = join(path, newname)
                print rename(oldpath, newpath)
                print 'Rename: ', oldpath, '->', newpath
            except Exception as e:
                print 'Error triying rename: ', fname, '->', newname
                raise e

def main():

    dirname = sys.argv[1]
    if not isdir(dirname):
        print usage
        sys.exit(1)

    rename_files(dirname)


if __name__ == '__main__':
    main()
于 2016-11-08T23:03:58.120 に答える