Python’da dosya kopyalamak için birden fazla yöntem kullanabiliriz. Örneğin istediğimiz şey bir dosyanın içeriğini başka bir dosyaya kopyalamak ise with ile dosyayı açabiliriz ve bir for döngüsü ile yeni dosyaya yazabiliriz. Diğer bir yöntem ise dosyaları direkt kopyalamak olurdu. Peki bu durumda ne yapabiliriz? shutil
modülü kullanabileceğiniz birçok metot sunar. Bunlardan biri:
from shutil import copyfile
copyfile(src, dst)
src
adlı dosyanın içeriğinidst
isimli dosyaya kopylalar. Her iki dosya için de yol bilgisi dahil olmak üzere dosyanın tam adı verilmelidir.- Hedef konum yazılabilir olmalıdır; aksi takdirde bir
IOError
özel durumu gündeme gelecektir. dst
zaten varsa, değiştirilir.- Karakter veya blok aygıtları ve kanallar gibi özel dosyalar bu işlevle kopyalanamaz.
src
vedst
string olarak verilir.
Python’da shutil.copy() ile dosya kopyalama
Bakılacak başka bir yöntem shutil.copy()
.
copy()
metodunun copyfile()
‘a göre avantajı hedef dosya yerine hedef klasor de belirtebilmemiz.
copy(src, dst) # dst bir klasor olabilir;
shutil.copy2()
Benzer bir metot olan copy2()
, copy()
‘ye göre daha fazla meta veriyi korur (örneğin zaman damgaları).
Bunun yanında rastgele 100 bin dosya kopyalamaya çalışıyorsanız copyfile
‘ın copy2'den
önemli ölçüde daha hızlı olduğunu unutmayın.
copyfile ve dosya/klasör isimleri?
copyfile boşluk içeren dosya ve klasör isimlerinde sorun yaşamaz. Ancak dosya isimlerinde özel karakterlerden kaçınmak gerekir. Örneğin \ işareti. Bu durumda doğru kullanım aşağıdaki gibi olmalı (\\):
import shutils
source = 'C:\\Documents and Settings\\Some directory\\My file.txt'
destination = 'C:\\Documents and Settings\\Some other directory\\Copy.txt'
shutil.copyfile(source, destination)
Yani:
Yanlış: C:\Test\Derp.txt'
Doğru: C:\\Test\\Derp.txt'
ya da daha iyisi r önekini kullanın:
source = r'C:\Documents and Settings\Some directory\My file.txt'
Yanlış kullanımınızda Errno 22 ile karşılaşabilirsiniz. Ancak unutmayın Errno 22 başka bir soruna da işaret edebilir. Bu hatayı aşağıdaki senaryolarda alabilirsiniz:
- Kaynak dosya veya hedef dosya başka bir işlem tarafından kullanılıyor.
- Dosya yolu Unicode karakterler içeriyor.
- Diğer erişim sorunları.
Alternatif olarak dosyaları taşımayı deneyebilirsiniz.