koddla

Yazılımcıları bilgi ile güçlendirir.

Python’da dosya taşıma nasıl yapılır?

Dosya taşımak için Python’da birden fazla seçeneğimiz var:

os.rename()os.replace() veya shutil.move() kullanabiliriz. Bu yöntemlerin hepsinde aynı sözdizimini kullanırız:

import os
import shutil

os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")

file.foo dosya adını hem kaynak hem de hedef bağımsız değişkenlere eklemeniz gerektiğini unutmayın. Dosya adı değiştirilirse, dosya yeniden adlandırılır ve öyle taşınır.

Ayrıca, ilk iki durumda yeni dosyanın oluşturulduğu dizinin zaten var olması gerektiğini de unutmayın. Windows’da, bu isme sahip bir dosya bulunmamalıdır. Bu durumda bir özel durum hatası oluşturulması gerekir. Ancak os.replace() bu durumda bile sessizce diğer dosyanın yerini almasını sağlar.

Burada hatalardan kaçınmak için klasörün var olup olmadığını (ya da dosyanın veya yolun) kontrol edebilirsiniz.

Çoğu durumda shutil.move sadece os.rename‘i çağırır. Ancak, hedef kaynaktan farklı bir diskteyse, bunun yerine kaynak dosyayı kopyalar ve kaynağı siler.

os.rename() ve shutil.move() her ikisi de dosyaları yeniden adlandırsa da, Unix mv komutuna en yakın komut shutil.move()‘dır. Fark, os.rename() kaynak ve hedef farklı disklerdeyse çalışmazken, shutil.move() disk konusunda agnostiktir.

Yol’da dosya ve klasör isimleri

Kaynak ve hedef yolunda dosya ve klasör isimlerinin yazılmasına dikkat edilmesi gerektiğini hatırlatmakta fayda var. Burada karşılaşılabilecek bir sorun \ karakterinin yalnış kullanımı olabilir. \ karakterinin özel bir anlamı olduğunu unutmayın. Aşağıdadki örnekte Python, \CN00020 klasöründeki \C’yi özel bir karakter olarak yorumlar. Bunun için üç farklı çözüm yöntemini değerlendirebilirsiniz:

#Yanlış kullanım
shutil.move('D:\New Folder\CN00020', 'D:\Batch Upload')

# escape backspace
shutil.move('D:\\New Folder\\CN00020', 'D:\\Batch Upload')

# raw strings
shutil.move(r'D:\New Folder\CN00020', r'D:\Batch Upload')

# ileri slash kullanabilirsiniz - shutil bu kullanımı destekler
shutil.move('D:/New Folder/CN00020', 'D:/Batch Upload')

Dosyaları kopyalarken de benzer şekilde karakter kullanımına dikkat etmemiz gerektiğini unutmayın.

pathlib ile dosya taşıma

Python 3.4’den sonra, dosyayı taşımak için pathlib sınıfı da kullanılabilir.

from pathlib import Path

Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top