Yanıtlar:
Kullanım os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
Windows ya /home/file.txt
da Linux / MacOS'ta olduğu gibi) kullanmanız gerektiği anlamına geliyor.
OSError
Windows sistemlerinde başarısız olacağını belirtmek gerekir . os.path.exists
yeniden adlandırmadan önce hedefin mevcut olup olmadığını kontrol etmek için kullanılmalıdır. Bu, "Kullanım Zamanı için Kontrol Zamanı" hatası oluşturur, ancak sorunlara neden olması olası değildir. (Bu konuda kolay bir yol bilmiyorum - buraya bakın .
os.replace
Dosya bir dizinin içinde olabilir, bu durumda yolu belirtin:
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')
Bu, bir dosyayı yeniden adlandırmak veya taşımak için çalışır.
shutil.move
atomik bir işlem olmadığı için iyi bir seçenek değildir. Örneğin, dosya açıksa, shutil.move
ile bir dosya oluşturur new_name
, ancak dosyayı old_name
iki dosyayla birlikte bırakmaz . os.rename
Öte yandan hiçbir şey yapmaz, bu daha iyi bir seçenektir . İle shutil.move
, hatayı yakalasanız bile, haydut dosyasını kontrol etme ve silme konusunda endişelenmeniz gerekir. Ne zaman Sadece değmez daha iyi bir araç var:os.rename
.
Python 3.4'ten itibaren bunu çözmek için pathlib modülünü kullanabilirsiniz.
Daha eski bir sürümde bulunuyorsanız, burada bulunan destekli sürümü kullanabilirsiniz
Yeniden adlandırmak istediğiniz kök yolda olmadığınızı varsayalım (sadece ona biraz zorluk eklemek için) ve tam bir yol sağlamak zorundayız, buna bakabiliriz:
some_path = 'a/b/c/the_file.extension'
Böylece, yolunuzu alıp Path
ondan bir nesne oluşturabilirsiniz :
from pathlib import Path
p = Path(some_path)
Şu anda sahip olduğumuz bu nesne hakkında bazı bilgiler vermek için, ondan bir şeyler çıkarabiliriz. Sebebi ne olursa olsun biz gelen dosya adını değiştirerek dosyayı yeniden adlandırmak istiyorsanız Örneğin, the_file
için the_file_1
, o zaman dosya adı bölümünü alabilirsiniz:
name_without_extension = p.stem
Ve yine de uzantıyı elinizde tutun:
ext = p.suffix
Modifikasyonumuzu basit bir dize manipülasyonu ile gerçekleştirebiliriz:
Python 3.6 ve üstü f-dizeleri kullanır!
new_file_name = f"{name_without_extension}_1"
Aksi takdirde:
new_file_name = "{}_{}".format(name_without_extension, 1)
Şimdi, rename
oluşturduğumuz yol nesnesindeki yöntemi çağırarak ve ext
istediğimiz uygun yeniden adlandırma yapısını tamamlamak için ekleyerek yeniden adlandırma işlemini gerçekleştirebiliriz:
p.rename(Path(p.parent, new_file_name + ext))
Basitliğini sergilemek için kısaca:
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'dan küçük sürümler bunun yerine dize biçimi yöntemini kullanır:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
kütüphane python 3.4'te tanıtıldığından, cevabın burada paylaşılması, daha karmaşık gereksinimler için çok yönlülüğünü ve kullanımını göstermek için sağlam bir modül için pozlama da sağlar.
os.rename(old, new)
Bu Python belgelerinde bulunur: http://docs.python.org/library/os.html
Kullanın os.rename
. Ancak her iki dosyanın da tam yolunu işleve iletmeniz gerekir. Eğer a.txt
masaüstümde bir dosya varsa ben de yapacağım ve ayrıca yeniden adlandırılmış dosya dolu vermek zorunda.
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()
bir dizine gidemezsiniz , örneğin UNC olduğunda Windows altında ne olur? Ve yapmanın chdir()
yan etkileri vardır. Sadece os.rename()
doğrudan gerekli yolları belirtmek istiyorum , hayır chdir()
.
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
modern ile karıştırılması pathlib
oldukça zordur. pathlib
Bunun yerine sonuna kadar git .
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")
Bunu yapmalı. python 3+
Görevi gerçekleştirmek üzere terminali çağırmak için os.system komutunu kullanabilirsiniz:
os.system('mv oldfile newfile')
mv
bir dosyayı taşımak / yeniden adlandırmak için bir unix yerleşik komut satırı programı olarak sadece unix tabanlı bir makinede çalışacaktır .