Jawaban:
Gunakan os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
pada Windows atau /home/file.txt
pada Linux / MacOS).
OSError
pada sistem Windows. os.path.exists
harus digunakan untuk memeriksa apakah target ada sebelum mengganti nama. Ini memang membuat bug "Waktu Periksa untuk Penggunaan Saat", tetapi itu tidak menyebabkan masalah. (Saya tahu tidak ada jalan mudah untuk ini - lihat di sini .
os.replace
File mungkin ada di dalam direktori, dalam hal ini tentukan path:
import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
import shutil
shutil.move('a.txt', 'b.kml')
Ini akan berfungsi untuk mengganti nama atau memindahkan file.
shutil.move
bukan pilihan yang baik karena tidak menjadi operasi atom. Jika file terbuka, misalnya, shutil.move
akan membuat file dengan new_name
, tetapi tidak akan menghapus file old_name
sehingga meninggalkan Anda dengan dua file. os.rename
di sisi lain tidak akan melakukan apa-apa, yang merupakan pilihan yang lebih baik . Dengan shutil.move
, bahkan jika Anda menemukan kesalahan, Anda masih harus khawatir tentang memeriksa dan menghapus file jahat. Hanya tidak sepadan ketika alat yang lebih baik ada:os.rename
.
Pada Python 3.4 orang dapat menggunakan modul pathlib untuk menyelesaikan ini.
Jika Anda menggunakan versi yang lebih lama, Anda dapat menggunakan versi yang di-backport yang ada di sini
Mari kita asumsikan Anda tidak berada di jalur root (hanya untuk menambahkan sedikit kesulitan), Anda ingin mengganti nama, dan harus memberikan path lengkap, kita dapat melihat ini:
some_path = 'a/b/c/the_file.extension'
Jadi, Anda bisa mengambil jalan Anda dan membuat Path
objek dari itu:
from pathlib import Path
p = Path(some_path)
Hanya untuk memberikan beberapa informasi di sekitar objek yang kita miliki sekarang, kita dapat mengekstraknya. Misalnya, jika karena alasan apa pun kami ingin mengganti nama file dengan memodifikasi nama file dari the_file
menjadi the_file_1
, maka kami bisa mendapatkan bagian nama file:
name_without_extension = p.stem
Dan masih memegang ekstensi di tangan juga:
ext = p.suffix
Kita dapat melakukan modifikasi dengan manipulasi string sederhana:
Python 3.6 dan yang lebih besar menggunakan f-string!
new_file_name = f"{name_without_extension}_1"
Jika tidak:
new_file_name = "{}_{}".format(name_without_extension, 1)
Dan sekarang kita dapat melakukan rename dengan memanggil rename
metode pada objek path yang kita buat dan menambahkan ext
untuk melengkapi struktur rename yang kita inginkan:
p.rename(Path(p.parent, new_file_name + ext))
Lebih singkat untuk menunjukkan kesederhanaannya:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Versi yang kurang dari Python 3.6 menggunakan metode format string sebagai gantinya:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
perpustakaan diperkenalkan dengan python 3.4 sehingga berbagi jawaban di sini juga menyediakan paparan untuk modul yang solid untuk menunjukkan fleksibilitas dan penggunaannya untuk persyaratan yang lebih rumit.
{}
Adalah untuk pemformatan string, yang dapat Anda baca di sini . Pada akhirnya, apa yang terjadi adalah bahwa {}
diganti dengan variabel yang diteruskan ke format
metode. Jadi yang pertama {}
akan memegang apa yang ada di dalam name_without_extension
, dan yang kedua akan memegang argumen kedua yang sederhana 1
.
os.rename(old, new)
Ini ditemukan dalam dokumen Python: http://docs.python.org/library/os.html
Gunakan os.rename
. Tetapi Anda harus melewati path lengkap dari kedua file ke fungsi. Jika saya memiliki file a.txt
di desktop saya maka saya akan melakukannya dan juga saya harus memberikan file yang penuh nama juga.
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()
ke direktori, mis. Apa yang terjadi di bawah Windows ketika UNC? Dan melakukan chdir()
efek samping. Saya lebih suka hanya menentukan jalur yang diperlukan untuk os.rename()
langsung, tidak ada chdir()
.
Anda dapat menggunakan os.system untuk memanggil terminal untuk menyelesaikan tugas:
os.system('mv oldfile newfile')
mv
unix seperti program commandline unix builtin untuk memindahkan / mengganti nama file.
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
dengan modern pathlib
cukup meragukan. Pergilah dengan pathlib
sebaliknya.
import shutil
import os
files = os.listdir("./pics/")
for key in range(0, len(files)):
print files[key]
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")
Ini harus dilakukan. python 3+