2017-12-14 34 views
1

サブフォルダを含むメインディレクトリのイメージの名前を変更する必要があります。私が今使っているスクリプトは、私が必要とするものではありません。それを正しく行うには、今私はそれを持っている:サブフォルダ内のファイル名の一部の変更python

maindir #my example origin 
├── Sub1 
│ ├── example01.jpg 
│ ├── example02.jpg 
│ └── example03.jpg 
└── Sub2 
    ├── example01.jpg 
    ├── example02.jpg 
    └── example03.jpg 

マイスクリプト行うこと:

maindir 
├── Sub1 
│ ├── Sub1_example01.jpg 
│ ├── Sub1_example02.jpg 
│ └── Sub1_example03.jpg 
└── Sub2 
    ├── Sub2_example01.jpg 
    ├── Sub2_example02.jpg 
    └── Sub2_example03.jpg 

そして、私はそれを取得したいと思い:私のサブフォルダ名によって、私のファイル名の文字を置換しておきます私のjpgの原点番号:

maindir 
├── Sub1 
│ ├── Sub1_01.jpg 
│ ├── Sub1_02.jpg 
│ └── Sub1_03.jpg 
└── Sub2 
    ├── Sub2_01.jpg 
    ├── Sub2_02.jpg 
    └── Sub2_03.jpg 

私が使用して自分のコード4魔女があります:

from os import walk, path, rename 
parent = ("F:\\PS\\maindir") 
for dirpath, _, files in walk(parent): 
    for f in files: 
     rename(path.join(dirpath, f), path.join(dirpath, path.split(dirpath)[-1] + '_' + f)) 

を、私は私の結果を得るためにoverhere変更しなければならないものは?

rename(path.join(dirpath, f), path.join(dirpath, path.split(dirpath)[-1] + '_' + f)) 

str.replaceを使用して新しい名前を生成します:

newf = f.replace("example",os.path.basename(dirpath)+"_") 

が、その後

rename(path.join(dirpath, f), path.join(dirpath,newf)) 

はもちろん、あなたが拡張またはわからない場合は、代わりにそのラインの

+0

あなたは、単にあなたのファイル名からexample' '文字列を削除しますか?もしそうでなければ、あなたのファイル名の構造を知っていますか?数字はいつも終わりですか?それは常に2桁の長さですか? =>ドットで分割し、最後の2文字を取ります。そうでない場合、これは正規表現のためのものかもしれません。 –

答えて

0

入力ファイルの「接頭辞」は、番号を保持したいだけです& extensio nは、方法があります:

import re 
number = (re.findall("\d+",f) or ['000'])[0] 

これは名前から番号を抽出し、見つからない場合は、000を発行します。

そして、フォルダ名とnewfを再構築し、抽出された数&元の拡張子:

newf = "{}_{}.{}".format(os.path.basename(dirpath),number,os.path.splitext(f)[1]) 
+0

Merci Jean :-)それは動作しますが、いくつかのオプションを使用して元の名前を分割することができましたか?ABC00039.jpg <<私のためにここにはstr + int.jpgがあります。私たちのコードを使うつもりの時 "ABC"? – romdrom

+0

どういう意味ですか? –

+0

私は何千ものサブフォルダを持っていて、それらの誰かがsub1- abc00068.jpg ...のような様々な始まりを持っています。 sub2 aaa00055.jpg etc ...私は毎回自分のスクリプトを修正する必要があります:pythonはそれを読んで自分自身で変更することができましたex:newf = f.replace(str、os.path.basename(dirpath)+ "_")) ; Pythonは自動的にfilenameに文字を読み込むオプションを持っていましたか?あなたが彼がこの名前を分けることができたかと聞いてみる前に、aaa(str-string)00068(int-integer).jpg ??? – romdrom