2011-08-23 15 views
5

ファイル名の読み込みに「_manual」という単語を追加するコードがあります。 ファイル名(ES)の最後の2文字を削除するようにスクリプトを変更する必要があります。 AC-5400ES.txt - > AC-5400_ES_manual.txtファイル名をPythonに置き換える

どのように私はこのコードにその機能を組み入れますか?

あなたができる
folder = r"C:/Documents and Settings/DuffA/Bureaublad/test" 
import os # glob is unnecessary 
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
     filename_zero, fileext = filename_split 
     print fullpath, filename_zero + "_manual" + fileext 
     os.rename(fullpath, filename_zero + "_manual" + fileext) 
+1

ENまたはESを意味しますか? – carlpett

+0

既存のスクリプトにはどのような問題がありますか? – rocksportrocker

+0

私はESを申し訳ありませんでした!スクリプトに問題はありませんが、ファイル名に入っているESをそのファイルに置き換える必要があります。それは混乱している場合申し訳ありません! –

答えて

10

このお試しください:hughdbrownの答えに、より一般的なテイクについて

import os 
pathiter = (os.path.join(root, filename) 
    for root, _, filenames in os.walk(folder) 
    for filename in filenames 
) 
for path in pathiter: 
    newname = path.replace('ES.txt', '_ES_manual.txt') 
    if newname != path: 
     os.rename(path,newname) 
+0

これはまた魅力のように機能します! - 両方とも動作する場合、どのように答えを選ぶのですか? –

+0

私はこのファイルを特に対象としているので、これを受け入れます!ありがとうございました! –

+0

@Alice Duff _hughdbrown_のコードは、 'ES.txt'で終わるファイル名にのみ適用されます。これらのファイル名だけを変更したい場合は正しいです。私のコードはより一般的なもので、拡張前の最後の2文字ですべてのファイル名を変更します。それはあなたが望むものではないことが起こるかもしれないので、あなたは_hughdbrown_をアップアップすることができます。しかし、変更するファイル名を選択するために自分のコードに条件を追加することも考えられます。したがって、私のコードはより一般的で適応性があります。あなたは考慮して選択する必要があります。 – eyquem

1

for filename in filenames: 
    print(filename) #should display AC-5400ES.txt 
    filename = filename.replace("ES.txt","ES_manual.txt") 
    print(filename) #should display AC-5400ES_manual.txt 
    fullpath = os.path.join(root, filename) 
    os.rename(fullpath, filename) 
+0

しかし、私はファイル名 "AC - 5400ES"のbeginng部分を維持する必要があります - これは、そのために働くでしょうか? –

+0

@Alice Duff:はい、この文はファイル名の文字列を取り、 "ES.txt"のすべての箇所を置き換え、 "ES_manual.txt"に置き換えます。これはあなたが説明したことを処理するための最も基本的な方法です。より洗練されたものが必要な場合は、正確に何を求めているのか教えてください:) – JMax

+0

うーん。私はこれを試してみたところ、まったく同じままです! –

3
for root, dirs, filenames in os.walk(folder): 
    to_write = ['root == %s\n' % root] 

    for filename in filenames: 
     filename_zero, fileext = os.path.splitext(filename) 
     newname = "%s_%s_manual%s" % (filename_zero[:-2],filename_zero[-2:],fileext) 

     tu = (os.path.join(root, filename), os.path.join(root, newname)) 

     to_write.append('%s --> %s\n' % tu) 
     os.rename(*tu) 

    print '\n'.join(to_write) 
+0

は魅力的です! –

+0

@Alice Duffそれは蛇を魅了しています!ちなみに、私はオブジェクト** to_write **を使用して、チャンク内のプリントを遅らせるので、一般的な実行は速くなります。 – eyquem

+0

チップのおかげでよかった! –

5

を。このコードは、特定の文字または文字セットを削除するために使用できます。

import os 

paths = (os.path.join(root, filename) 
     for root, _, filenames in os.walk('C:\FolderName') 
     for filename in filenames) 

for path in paths: 
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory 
    newname = path.replace('#', '-') 
    if newname != path: 
     os.rename(path, newname) 
関連する問題