106

Pythonを使用して、ディレクトリにすでに含まれているファイルのグループの名前を変更する簡単な方法はありますか?

例: *。docファイルでいっぱいのディレクトリがあり、一貫した方法でそれらの名前を変更したいと思います。

X.doc-> "new(X).doc"

Y.doc-> "new(Y).doc"

4

14 に答える 14

138

私は、より一般的で複雑なコードを作成する代わりに、実行する必要がある置換ごとに小さな 1 つのライナーを作成することを好みます。例えば:

これにより、現在のディレクトリ内の非表示でないファイルのすべてのアンダースコアがハイフンに置き換えられます

import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]
于 2011-10-27T14:53:14.117 に答える
117

このような名前の変更は、たとえばosおよびglobモジュールを使用すると非常に簡単です。

import glob, os

def rename(dir, pattern, titlePattern):
    for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
        title, ext = os.path.splitext(os.path.basename(pathAndFilename))
        os.rename(pathAndFilename, 
                  os.path.join(dir, titlePattern % title + ext))

次に、次のように例で使用できます。

rename(r'c:\temp\xx', r'*.doc', r'new(%s)')

上記の例では、 dir内のすべての*.docファイルを に変換します。ここで、はファイルの以前のベース名 (拡張子なし) です。c:\temp\xxnew(%s).doc%s

于 2008-10-22T18:59:57.850 に答える
23

正規表現を使用してもかまわない場合は、この関数を使用すると、ファイルの名前を変更できます。

import re, glob, os

def renamer(files, pattern, replacement):
    for pathname in glob.glob(files):
        basename= os.path.basename(pathname)
        new_filename= re.sub(pattern, replacement, basename)
        if new_filename != basename:
            os.rename(
              pathname,
              os.path.join(os.path.dirname(pathname), new_filename))

したがって、あなたの例では、次のことができます(ファイルがある現在のディレクトリであると仮定します)。

renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")

ただし、最初のファイル名にロールバックすることもできます。

renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")

もっと。

于 2008-10-22T19:30:05.743 に答える
12

フォルダーのサブフォルダー内のすべてのファイルの名前を変更するだけです

import os

def replace(fpath, old_str, new_str):
    for path, subdirs, files in os.walk(fpath):
        for name in files:
            if(old_str.lower() in name.lower()):
                os.rename(os.path.join(path,name), os.path.join(path,
                                            name.lower().replace(old_str,new_str)))

old_str のすべての出現箇所を new_str に置き換えます。

于 2013-12-04T09:46:49.960 に答える
6

試してください:http://www.mattweber.org/2007/03/04/python-script-renamepy/

私は自分の音楽、映画、写真のファイルに特定の名前を付けるのが好きです。インターネットからファイルをダウンロードするとき、それらは通常私の命名規則に従っていません。私は自分のスタイルに合うように各ファイルの名前を手動で変更していることに気づきました。これは本当に早く古くなったので、私はそれをするためのプログラムを書くことにしました。

このプログラムは、ファイル名をすべて小文字に変換し、ファイル名内の文字列を任意の文字列に置き換え、ファイル名の前または後ろから任意の数の文字をトリミングできます。

プログラムのソースコードも利用できます。

于 2008-10-22T13:37:36.907 に答える
2
directoryName = "Photographs"
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"

for counter, filename in enumerate(os.listdir(directoryName)):

    filenameWithPath = os.path.join(filePathWithSlash, filename)

    os.rename(filenameWithPath, filenameWithPath.replace(filename,"DSC_" + \
          str(counter).zfill(4) + ".jpg" ))

# e.g. filename = "photo1.jpg", directory = "c:\users\Photographs"        
# The string.replace call swaps in the new filename into 
# the current filename within the filenameWitPath string. Which    
# is then used by os.rename to rename the file in place, using the  
# current (unmodified) filenameWithPath.

# os.listdir delivers the filename(s) from the directory
# however in attempting to "rename" the file using os 
# a specific location of the file to be renamed is required.

# this code is from Windows 
于 2017-04-30T08:37:46.327 に答える