回答:
使用os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
Windowsや/home/file.txt
Linux / MacOSなど)を使用する必要があることを意味します。
os.replace
import shutil
shutil.move('a.txt', 'b.kml')
これは、ファイルの名前変更または移動に役立ちます。
shutil.move
アトミック操作ではないため、これは適切なオプションではありません。たとえば、ファイルが開いている場合は、でファイルがshutil.move
作成されますが、ではファイルがnew_name
削除されないold_name
ため、2つのファイルが残ります。os.rename
一方、何もしません。これはより良いオプションです。を使用するshutil.move
と、エラーが発生した場合でも、不正なファイルの確認と削除について心配する必要があります。より良いツールが存在するos.rename
場合、それだけの価値はありません。
Python 3.4以降では、pathlibモジュールを使用してこれを解決できます。
古いバージョンを使用している場合は、ここにあるバックポートされたバージョンを使用できます
あなたが名前を変更したいルートパスにいない(それを少しだけ困難にするため)のではなく、フルパスを提供する必要があるとしましょう、これを見ることができます:
some_path = 'a/b/c/the_file.extension'
したがって、パスを取得Path
して、そこからオブジェクトを作成できます。
from pathlib import Path
p = Path(some_path)
現在持っているこのオブジェクトに関するいくつかの情報を提供するために、オブジェクトから何かを抽出できます。たとえば、何らかの理由でファイル名をからthe_file
に変更してファイルの名前を変更する場合、ファイルthe_file_1
名の部分を取得できます。
name_without_extension = p.stem
さらに、拡張機能も手元に置いておきます。
ext = p.suffix
簡単な文字列操作で変更を実行できます。
Python 3.6以降ではf-stringsを使用しています!
new_file_name = f"{name_without_extension}_1"
さもないと:
new_file_name = "{}_{}".format(name_without_extension, 1)
これrename
で、作成したパスオブジェクトのメソッドを呼び出し、を追加するext
ことで名前を変更し、適切な名前変更構造を完成させることができます。
p.rename(Path(p.parent, new_file_name + ext))
その簡潔さを紹介するためにもう少し:
Python 3.6以降:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Python 3.6より前のバージョンでは、代わりに文字列フォーマット方式を使用します。
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
ライブラリはpython 3.4で導入されたため、ここで答えを共有することで、より複雑な要件に対するその汎用性と使用法を紹介するための固体モジュールの公開も提供されます。
os.rename(old, new)
これはPythonのドキュメントにあります:http : //docs.python.org/library/os.html
を使用しos.rename
ます。ただし、両方のファイルの完全パスを関数に渡す必要があります。a.txt
デスクトップにファイルがある場合は、そうする予定です。名前を変更したファイルもすべて指定する必要があります。
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
import os
# Set the path
path = 'a\\b\\c'
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in
os.chdir(saved_cwd)
chdir()
ディレクトリに移動できるわけではありません。たとえば、WindowsでUNCの場合はどうなりますか?そして、行うにchdir()
は副作用があります。必要なパスをos.rename()
直接指定するだけで、chdir()
ING は行いません。
os.systemを使用してターミナルを呼び出し、タスクを実行できます。
os.system('mv oldfile newfile')
mv
ファイルを移動/名前変更するためのUNIX組み込みコマンドラインプログラムと同様に、UNIXベースのマシンでのみ機能します。
import os
import re
from pathlib import Path
for f in os.listdir(training_data_dir2):
for file in os.listdir( training_data_dir2 + '/' + f):
oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
p=oldfile
p.rename(newfile)
os.path
とモダンを混在させることpathlib
は非常に不確かです。pathlib
代わりにずっと行きます。