Python を使用して、ディレクトリ内のいくつかのファイルの名前を変更しようとしています。
というファイルがCHEESE_CHEESE_TYPE.***
あり、削除したいCHEESE_
ので、結果のファイル名はCHEESE_TYPE
を使用しようとしていますos.path.split
が、正しく動作しません。文字列操作の使用も検討しましたが、それも成功していません。
Python を使用して、ディレクトリ内のいくつかのファイルの名前を変更しようとしています。
というファイルがCHEESE_CHEESE_TYPE.***
あり、削除したいCHEESE_
ので、結果のファイル名はCHEESE_TYPE
を使用しようとしていますos.path.split
が、正しく動作しません。文字列操作の使用も検討しましたが、それも成功していません。
os.rename(src, dst)
ファイルまたはディレクトリの名前変更または移動に使用します。
$ ls
cheese_cheese_type.bar cheese_cheese_type.foo
$ python
>>> import os
>>> for filename in os.listdir("."):
... if filename.startswith("cheese_"):
... os.rename(filename, filename[7:])
...
>>>
$ ls
cheese_type.bar cheese_type.foo
これは、最新のコメントに基づくスクリプトです。
#!/usr/bin/env python
from os import rename, listdir
badprefix = "cheese_"
fnames = listdir('.')
for fname in fnames:
if fname.startswith(badprefix*2):
rename(fname, fname.replace(badprefix, '', 1))
次のコードは機能するはずです。現在のディレクトリ内のすべてのファイル名を取得し、ファイル名にパターンが含まれているCHEESE_CHEESE_
場合は名前が変更されます。そうでない場合、ファイル名に対して何も行われません。
import os
for fileName in os.listdir("."):
os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))
すでにディレクトリにいて、コメントの「最初の 8 文字」が常に当てはまると仮定します。(「CHEESE_」は7文字なのに…?だったら下の8を7に変更)
from glob import glob
from os import rename
for fname in glob('*.prj'):
rename(fname, fname[8:])
PDFファイルの空白をダッシュに置き換えたいという同じ問題があります
-
。しかし、ファイルは複数のサブディレクトリにありました。だから、私は使用しなければなりませんでしたos.walk()
。複数のサブディレクトリの場合、次のようになります。
import os
for dpath, dnames, fnames in os.walk('/path/to/directory'):
for f in fnames:
os.chdir(dpath)
if f.startswith('cheese_'):
os.rename(f, f.replace('cheese_', ''))
これを試して:
import os
import shutil
for file in os.listdir(dirpath):
newfile = os.path.join(dirpath, file.split("_",1)[1])
shutil.move(os.path.join(dirpath,file),newfile)
ファイル拡張子を削除したくないと思いますが、ピリオドを使用して同じ分割を行うことができます。
あなたの問題は、名前の変更自体ではなく、新しいファイル名の決定にあるようです( os.rename メソッドを使用できます)。
名前を変更したいパターンが何であるかは、あなたの質問からは明らかではありません。文字列操作に問題はありません。ここで必要なのは正規表現かもしれません。
このコマンドは、 renamer を使用して、現在のディレクトリ内のすべてのファイルから最初の" CHEESE_ " 文字列を削除します。
$ renamer --find "/^CHEESE_/" *
簡単にするために os.system 関数を使用し、bash を呼び出してタスクを実行できます。
import os
os.system('mv old_filename new_filename')
import re
p = re.compile(r'_')
p.split(filename, 1) #where filename is CHEESE_CHEESE_TYPE.***