2017-04-24 10 views
0

私は非常にPythonとstackoverflowの新機能ですが、これまでの仕事で小さな日常の作業に使用できる方法を愛しています!親フォルダに基づいてファイルの名前を変更しますが、バリエーションは異なります

私はちょうど会社の標準にファイルのセットを合わせなければならないプロジェクトに着手しました - 基本的に会社の命名命名法に一致するファイルの名前を変更します。

次のように現在のフォルダ構造は次のとおりです。

  • 施工図フォルダ
    • M001 - ピープル・ホール
      • 人々ホール1_Final.vsd
      • 人々Hall_Final-2.vsd
      • 人物Hall-3_Final.vsd

私はそれらを変更するために必要なものであり:

  • 施工図フォルダ
    • M001 - ピープル・ホール
      • M001_People_Hall_Final-1.vsd
      • M001_People_Hall_Final-2。 VSD
      • M001_People_Hall_Final-3.vsd

あなたが見ることができるように、私たちは "-1_Final.vsd" を持っているかもしれない持っている現在のファイルといくつか他の人が持っているかもしれない「_Final-2.vsd "異なる「M」番号と名前を持つ約400の「M001 - People Hall」フォルダがあります。また、一部のフォルダには1つのファイルしか存在しない場合があります。

私はこれを行うために多くの方法を試しました(このウェブサイトで同様の質問を読んでいます)が、これは私がやらなければならなかった最も複雑なことになるので、これまでのところ、私はここに関わるもののほとんどが私の頭の上にあると思います!私はPythonに関する本を読んできました。これはosのインポートの基本的な概要を示しています。しかし、このPythonスクリプトを一緒に手に入れて助けてもらうことができます。

誰かが何か提案があれば、私は非常に感謝しています!

本当にありがとうございましたが、 デイブ

+1

あなたがこれまでに試してみました何を? –

答えて

0

私は彼らが戻って参加し、数字をフィルタリング、言葉にそれらを分割することで、ファイル名を「正常化」しようと思います。

import os 
import re 


def cut_and_sort(name): 
    # "foo_bar-3-baz" -> ["foo", "bar", "baz", "3"] 
    parts = re.split(r'[\s\._-]', name) 
    result = [] 
    result.extend(p for p in parts if not p.isdigit()) # words first. 
    result.extend(p for p in parts if p.isdigit()) # numbers last. 
    return result 


def normalize_name(name): 
    # cut out the.vsd part. 
    name, ext = os.path.splitext(name) 
    # recombine the name from parts. 
    return '_'.join(cut_and_sort(name)) + ext 

今、次のことができます。

>>> normalize_name('People Hall_2-Final.vsd') 
'People_Hall_Final_2.vsd' 

私はそれはあなたのために良い出発点だ願っています。

+0

こんにちは@DavidBlack!私はあなたが残りを把握できたことを願っています。 – 9000

+0

'輸入OS ディレクトリ= R'C:\ Users \ユーザーデビッド\ OneDrive \ドキュメント\ Pythonの\ザ・セルフ\ 20150178タフツ parent_directory = os.path.dirname(ディレクトリ) vsdfiles = [はos.pathプログラマーを教えました。ファイル \tに名前を(ルート、名)ルートの 、dirsに、os.walk内のファイル(ディレクトリ) 参加する場合name.endswith(() "VSD。")] vsdfiles内のファイルの : があれば(vsdfiles内のファイルの場合は "-1"): os.replace( " - 1"、 "") os.rename(ファイル、パス+ファイル) vsdfiles ): os。 replace( ""、 "_") ' –

+0

あなたのように進行状況をどのようにフォーマットするのか分かりません...しかし、それはこれまでのことです。私は、製品を手に入れるために必要なステップを私の目の前に書いたフローチャートを持っていますが、私にとっては非常に基本的なものが得られないようです。どんな批判(私は確かにすべてです!)を高く評価しています! @Greg –

0

9000の答えが動作しない場合、私は次の線に沿って何かしようとするだろう:

import os 
directory = <<INSERT DIRECTORY PATH HERE>> 

parent_directory = os.path.dirname(directory) 

for filename in os.listdir(directory): 
    os.rename(filename, parent_directory + '_' + filename) 
+0

こんにちはグレッグ、ありがとうございます。私の進捗状況を見るには9000への私の返信を参照してください。今晩私が今夜持っているものを投稿する機会を得ることを願っています! ありがとう、 Dave –

関連する問題