1

特定のディレクトリにあるすべてのファイルの末尾に「_Manual」という単語を追加するだけで済みます。現在使用しているスクリプトは次のとおりです。Python の経験がないため、このスクリプトは他のスクリプトのフランケンシュタインです。横たわっていた!

エラーメッセージは表示されませんが、機能しません..

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"

import os, glob

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
        filename_zero = filename_split[0]
        os.rename(filename_zero, filename_zero + "_manual")

私は今使用しています

folder = "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)

しかし、それでも機能しません..何も印刷されず、フォルダー内で何も変更されません!

4

4 に答える 4

5

os.renameソースと宛先のファイル名が必要です。変数には現在のファイル名 (「something.txt」など) が含まれますが、分割ではそれがとfilenameに分けられます。名前を変更するソース ファイルとして、 のみを指定しますが、これはサイレント モードで失敗します。somethingtxtsomething

代わりに、 で指定されたファイルの名前を変更したいのですfilenameが、サブフォルダーにも移動するときは、必ず絶対パスを使用する必要があります。これには、 を使用できますos.path.join(root, filename)

したがって、最終的には次のようなものが得られます。

os.rename(os.path.join(root, filename), 
  os.path.join(root, filename_zero + "_manual" + filename_split[1]))

これは に名前が変更dir1/something.txtされdir1/something_manual.txtます。

于 2011-08-23T07:07:57.983 に答える
4
folder = r"C:\Documents and Settings\DuffA\Bureaublad\test"

import os, glob

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
        filename_zero = filename_split[0]
        os.rename(os.path.join(root, filename), os.path.join(root, filename_zero + "_manual" + filename_split[1]))

コードで、名前を変更しようとしてfilename_zeroいます。これは拡張子のないファイル名であるため、実際のパスとしては存在しません。上記のようにフルパスを指定する必要がありますos.rename

于 2011-08-23T07:07:30.210 に答える
3

I.e。それは何もしませんか?どれどれ:

folder = "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
        os.rename(fullpath, filename_zero + "_manual" + fileext)

フルパスで作業する必要があるため、うまくいく可能性があります。しかし、ファイルが見つからなかったときに例外がなかった理由がわかりません...


変更をより目立つ場所に配置するために編集します。

あなたもあなたの道が間違っているようです。

使用する

folder = r"C:\Documents and Settings\DuffA\Bureaublad\test"

\tがタブ文字に変わるのを防ぐため。

于 2011-08-23T07:07:42.207 に答える
0
for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        os.rename(os.path.join(root,filename),
                  os.path.join(root,'%s_manual%s' % os.path.splitext(filename)))

コードにコントロールを追加して、名前を変更するファイル名の文字列名に「_manual」がまだ含まれていないことを確認する必要があります

于 2011-08-23T07:41:13.970 に答える