411

Python を使用して、ディレクトリ内のいくつかのファイルの名前を変更しようとしています。

というファイルがCHEESE_CHEESE_TYPE.***あり、削除したいCHEESE_ので、結果のファイル名はCHEESE_TYPE

を使用しようとしていますos.path.splitが、正しく動作しません。文字列操作の使用も検討しましたが、それも成功していません。

4

15 に答える 15

647

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
于 2010-05-03T15:25:56.927 に答える
38

これは、最新のコメントに基づくスクリプトです。

#!/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))
于 2010-05-03T15:22:55.963 に答える
24

次のコードは機能するはずです。現在のディレクトリ内のすべてのファイル名を取得し、ファイル名にパターンが含まれているCHEESE_CHEESE_場合は名前が変更されます。そうでない場合、ファイル名に対して何も行われません。

import os
for fileName in os.listdir("."):
    os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))
于 2014-07-17T05:58:40.330 に答える
16

すでにディレクトリにいて、コメントの「最初の 8 文字」が常に当てはまると仮定します。(「CHEESE_」は7文字なのに…?だったら下の8を7に変更)

from glob import glob
from os import rename
for fname in glob('*.prj'):
    rename(fname, fname[8:])
于 2010-05-03T15:54:11.810 に答える
11

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_', ''))
于 2015-03-08T21:15:08.410 に答える
7

これを試して:

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)

ファイル拡張子を削除したくないと思いますが、ピリオドを使用して同じ分割を行うことができます。

于 2010-05-03T15:35:57.900 に答える
4

あなたの問題は、名前の変更自体ではなく、新しいファイル名の決定にあるようです( os.rename メソッドを使用できます)。

名前を変更したいパターンが何であるかは、あなたの質問からは明らかではありません。文字列操作に問題はありません。ここで必要なのは正規表現かもしれません。

于 2010-05-03T15:23:15.427 に答える
4

このコマンドは、 renamer を使用して、現在のディレクトリ内のすべてのファイルから最初の" CHEESE_ " 文字列を削除します。

$ renamer --find "/^CHEESE_/" *
于 2013-09-23T17:16:41.383 に答える
2

簡単にするために os.system 関数を使用し、bash を呼び出してタスクを実行できます。

import os
os.system('mv old_filename new_filename')
于 2016-01-11T05:06:24.950 に答える
0

これはどうですか :

import re
p = re.compile(r'_')
p.split(filename, 1) #where filename is CHEESE_CHEESE_TYPE.***
于 2010-05-03T15:34:11.710 に答える