Python'da nasıl dosya kopyalarım?


2476

Python'da nasıl dosya kopyalarım?

Altında hiçbir şey bulamadım os.


117
Görünüşe göre cp bir sistem çağrısı değildir ve bu nedenle os modülüne ait değildir. Bu bir kabuk komutudur, bu yüzden shutil modülüne konur.
waldol1

Yanıtlar:


3007

shutilkullanabileceğiniz birçok yöntem vardır. Bunlardan biri:

from shutil import copyfile
copyfile(src, dst)
  • Src adlı dosyanın içeriğini dst adlı bir dosyaya kopyalayın .
  • Hedef konum yazılabilir olmalıdır; aksi takdirde, bir IOError istisnası ortaya çıkar.
  • Eğer dst zaten var, bu değiştirilecektir.
  • Karakter veya blok aygıtları ve yöneltmeler gibi özel dosyalar bu işlevle kopyalanamaz.
  • İle kopya , src ve dst olarak verilen yol isimlerdir dizeleri .

Eğer kullanırsanız os.pathoperasyonları kullanmak copyyerine copyfile. copyfileolacak sadece dizeleri kabul .


147
Copy ve copyfile arasındaki fark nedir?
Matt

385
kopyada (src, dst) dst bir dizin olabilir.
Owen

41
Platformunuza bağlı olarak tüm meta verilerin kopyalanmayacağını unutmayın.
Kevin Horn

12
Atomik bir işlem olmadığını unutmayın. Dişli bir uygulamada kullanmaya dikkat edin.
waterbyte

4
Bunun gibi kısaltmaları ~
kaldıramayacağını

1252
┌──────────────────┬────────┬───────────┬───────┬────────────────┐
│     Function     │ Copies │   Copies  │Can use│   Destination  │
│                  │metadata│permissions│buffer │may be directory│
├──────────────────┼────────┼───────────┼───────┼────────────────┤
│shutil.copy       │   No   │    Yes    │   No  │      Yes       │
│shutil.copyfile   │   No   │     No    │   No  │       No       │
│shutil.copy2      │  Yes   │    Yes    │   No  │      Yes       │
│shutil.copyfileobj│   No   │     No    │  Yes  │       No       │
└──────────────────┴────────┴───────────┴───────┴────────────────┘

732

copy2(src,dst)genellikle aşağıdakilerden daha yararlıdır copyfile(src,dst):

  • buna izin dstbir olmak dizini (yerine tamamen hedef dosya), ki bu durumda basename arasında srcyeni bir dosya oluşturmak için kullanılır;
  • dosya meta verilerindeki orijinal değişiklik ve erişim bilgilerini (mtime ve atime) korur (ancak bu, hafif bir ek yük ile birlikte gelir).

Kısa bir örnek:

import shutil
shutil.copy2('/src/dir/file.ext', '/dst/dir/newname.ext') # complete target filename given
shutil.copy2('/src/file.ext', '/dst/dir') # target filename is /dst/dir/file.ext

19
100 milyon dosyayı rasgele 1 milyon dosyadan kopyalamaya çalışıyorum. copyfileoldukça hızlıcopy2
Vijay

4
shutil.copy2('/dir/file.ext', '/new/dir/')(hedef yoldan sonra eğik çizgi ile) "dir" adlı yeni bir dosyaya kopyalamak veya dosyayı bu adın bir dizinine koymak için belirsizliği kaldıracağını varsayalım mı?
Zak

1
@Vijay Bu yükün meta verileri kopyalamaktan kaynaklandığına inanıyorum.
Jonathan H

@Zak /new/dirVarolan bir dizin varsa belirsizlik yoktur , bkz. @ MatthewAlpert'in yorumu.
Jonathan H

@Zak Haklısın, sonuna eğik çizgi eklemek belirsizliği ortadan kaldırıyor. Eğer /new/dir/yoksa, Python bir atacağım IsADirectoryErroriçin, aksi takdirde kopyalar dosyasını /new/dir/orijinal adı altında.
martonbognar

125

shutilPaketteki kopyalama işlevlerinden birini kullanabilirsiniz :

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
İşlev korur destekler diğer kopyaları kabul eder
                      izinler dizini dosya objesi meta verileri  
-------------------------------------------------- ----------------------------
shutil.copy               ✔ ✔ ☐ ☐
 shutil.copy2              ✔ ✔ ☐ ✔
 shutil.copyfile           ☐ ☐ ☐ ☐
 Instagram Hesabındaki Resim ve Videoları shutil.copyfileobj        ☐ ☐ ✔ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Misal:

import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')

10
Sadece merak ediyorum, bu tabloyu nasıl oluşturdun?
lightalchemist

16
@ lightalchemist Vim'i karalama alanı olarak kullandım, kullanılan unicode sembollerini bir wikipedia tablosundan kopyaladım ve sonucu son parlatma için stackoverflow düzenleyicisine kopyaladım.
maxschlepzig

3
Bunun 2 yıl önceki diğer cevaptan farkı nedir? stackoverflow.com/a/30359308/674039
wim

1
@wim, cevabımı, cevabımı gönderdiğimde geçerli olan bağladığınız cevabın 2017 versiyonu ile karşılaştırmalısınız . Temel farklılıklar: cevabım daha iyi / daha açıklayıcı sütun başlıkları kullanıyor, tablo düzeni dikkat dağıtıcı değil, belgelemeye doğrudan bağlantılar içeriyor ve bir sütun ekledim (yani 'dosya objesini kabul ediyor').
maxschlepzig

4
TAMAM. YMMV, ancak bence kozmetik değişiklikler ve bunun gibi küçük iyileştirmeler, cevapların çoğaltılmasından ziyade mevcut cevaplarda düzenleme olarak daha iyi yapılıyor.
wim

104

Python'da dosyaları kullanarak kopyalayabilirsiniz.


import os
import shutil
import subprocess

1) shutilModül kullanarak dosya kopyalama

shutil.copyfile imza

shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)

# example    
shutil.copyfile('source.txt', 'destination.txt')

shutil.copy imza

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy('source.txt', 'destination.txt')

shutil.copy2 imza

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy2('source.txt', 'destination.txt')  

shutil.copyfileobj imza

shutil.copyfileobj(src_file_object, dest_file_object[, length])

# example
file_src = 'source.txt'  
f_src = open(file_src, 'rb')

file_dest = 'destination.txt'  
f_dest = open(file_dest, 'wb')

shutil.copyfileobj(f_src, f_dest)  

2) osModül kullanarak dosya kopyalama

os.popen imza

os.popen(cmd[, mode[, bufsize]])

# example
# In Unix/Linux
os.popen('cp source.txt destination.txt') 

# In Windows
os.popen('copy source.txt destination.txt')

os.system imza

os.system(command)


# In Linux/Unix
os.system('cp source.txt destination.txt')  

# In Windows
os.system('copy source.txt destination.txt')

3) subprocessModül kullanarak dosya kopyalama

subprocess.call imza

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.call('cp source.txt destination.txt', shell=True) 

# In Windows
status = subprocess.call('copy source.txt destination.txt', shell=True)

subprocess.check_output imza

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.check_output('cp source.txt destination.txt', shell=True)

# In Windows
status = subprocess.check_output('copy source.txt destination.txt', shell=True)


9
Tek dize komutlarını kullanmak kötü kodlama stilidir (esneklik, güvenilirlik ve güvenlik), bunun yerine ['copy', sourcefile, destfile], özellikle parametreler kullanıcı girdisindeyse, mümkün olan her yerde sözdizimi kullanın .
Marcel Waldvogel

8
Neden kapatma kopyası işlevlerine bu kadar çok kötü alternatif listeliyorsunuz?
maxschlepzig

6
shutil yerleşiktir, taşınabilir olmayan alternatifler sağlamaya gerek yoktur. Yanıt aslında sisteme bağlı çözümleri kaldırarak geliştirilebilir ve bu kaldırmadan sonra bu cevap mevcut cevapların bir kopyası / belgelerin bir kopyasıdır.
Jean-François Fabre

3
os.popenbir süredir kullanımdan kaldırıldı. ve check_outputdurumu döndürmez ancak çıktı (bu durumda boştur copy/cp)
Jean-François Fabre

2
shutil aslında dosyaları kopyalamaz. Orada docs üst kısmında kocaman bir uyarı sağ . "Bu, dosya sahibinin ve grubun ACL'lerin yanı sıra kaybolduğu anlamına gelir. Mac OS'de kaynak çatalı ve diğer meta veriler kullanılmaz. Bu, kaynakların kaybolacağı ve dosya türü ve içerik oluşturucu kodlarının doğru olmayacağı anlamına gelir. Windows'ta dosya sahipleri, ACL'ler ve alternatif veri akışları kopyalanmaz. "
gman

96

Bir dosyayı kopyalamak, aşağıdaki örneklerde gösterildiği gibi nispeten basit bir işlemdir, ancak bunun için shutil stdlib modülünü kullanmalısınız .

def copyfileobj_example(source, dest, buffer_size=1024*1024):
    """      
    Copy a file from source to dest. source and dest
    must be file-like objects, i.e. any object with a read or
    write method, like for example StringIO.
    """
    while True:
        copy_buffer = source.read(buffer_size)
        if not copy_buffer:
            break
        dest.write(copy_buffer)

Dosya adına göre kopyalamak isterseniz, böyle bir şey yapabilirsiniz:

def copyfile_example(source, dest):
    # Beware, this example does not handle any edge cases!
    with open(source, 'rb') as src, open(dest, 'wb') as dst:
        copyfileobj_example(src, dst)

25
Bir süre önce modül shutil (tekil) değil shutils (çoğul) denir fark ve gerçekten de olduğu Python 2.3. Yine de bu fonksiyonu burada örnek olarak bırakıyorum.
pi.

4
Bir dosyanın içeriğini kopyalamak kolay bir işlemdir. Dosyayı meta verileriyle kopyalamak, platformlar arasında olmak istiyorsanız daha da basittir.
LaC

3
Doğru. Kapatma belgelerine bakıldığında, copyfile işlevi meta verileri de kopyalamaz.
pi.

3
Evet, kaynağını neden kopyalamak istemediğinizden emin değilim shutil.copyfileobj. Ayrıca, try, finallyistisnalardan sonra dosyaları kapatmak için herhangi bir işleminiz yoktur. Bununla birlikte, işlevinizin dosyaları hiç açıp kapatmaktan sorumlu olmaması gerektiğini söyleyebilirim. Bu, nasıl shutil.copyfilesarıldığı gibi bir sarıcı işlevine girmelidir shutil.copyfileobj.
ErlVolton

2
Yukarıdaki kod destyazılabilir olarak belirtilmelidir:open(dest, 'wb')
user1016274

69

Kapama modülünü kullanın .

copyfile(src, dst)

Src adlı dosyanın içeriğini dst adlı bir dosyaya kopyalayın. Hedef konum yazılabilir olmalıdır; aksi takdirde, bir IOError istisnası ortaya çıkar. Dst zaten varsa, değiştirilecektir. Karakter veya blok aygıtları ve yöneltmeler gibi özel dosyalar bu işlevle kopyalanamaz. src ve dst, dize olarak verilen yol adlarıdır.

Bir göz atın filesys standart Python modülleri bulunan tüm dosya ve dizin taşıma işlevleri için.


shutil aslında dosyaları kopyalamaz. Orada docs üst kısmında kocaman bir uyarı sağ . "Bu, dosya sahibinin ve grubun ACL'lerin yanı sıra kaybolduğu anlamına gelir. Mac OS'de kaynak çatalı ve diğer meta veriler kullanılmaz. Bu, kaynakların kaybolacağı ve dosya türü ve içerik oluşturucu kodlarının doğru olmayacağı anlamına gelir. Windows'ta dosya sahipleri, ACL'ler ve alternatif veri akışları kopyalanmaz. "
gman

47

Dizin ve Dosya kopyalama örneği - Tim Golden's Python Stuff'dan:

http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html

import os
import shutil
import tempfile

filename1 = tempfile.mktemp (".txt")
open (filename1, "w").close ()
filename2 = filename1 + ".copy"
print filename1, "=>", filename2

shutil.copy (filename1, filename2)

if os.path.isfile (filename2): print "Success"

dirname1 = tempfile.mktemp (".dir")
os.mkdir (dirname1)
dirname2 = dirname1 + ".copy"
print dirname1, "=>", dirname2

shutil.copytree (dirname1, dirname2)

if os.path.isdir (dirname2): print "Success"

24

İlk olarak, referansınız için kapsamlı bir hile sayfası hilesi yaptım.

shutil_methods =
{'copy':['shutil.copyfileobj',
          'shutil.copyfile',
          'shutil.copymode',
          'shutil.copystat',
          'shutil.copy',
          'shutil.copy2',
          'shutil.copytree',],
 'move':['shutil.rmtree',
         'shutil.move',],
 'exception': ['exception shutil.SameFileError',
                 'exception shutil.Error'],
 'others':['shutil.disk_usage',
             'shutil.chown',
             'shutil.which',
             'shutil.ignore_patterns',]
}

İkinci olarak, örneklerde kopya yöntemlerini açıklayın:

  1. shutil.copyfileobj(fsrc, fdst[, length]) açılmış nesneleri manipüle etme
In [3]: src = '~/Documents/Head+First+SQL.pdf'
In [4]: dst = '~/desktop'
In [5]: shutil.copyfileobj(src, dst)
AttributeError: 'str' object has no attribute 'read'
#copy the file object
In [7]: with open(src, 'rb') as f1,open(os.path.join(dst,'test.pdf'), 'wb') as f2:
    ...:      shutil.copyfileobj(f1, f2)
In [8]: os.stat(os.path.join(dst,'test.pdf'))
Out[8]: os.stat_result(st_mode=33188, st_ino=8598319475, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067347, st_mtime=1516067335, st_ctime=1516067345)
  1. shutil.copyfile(src, dst, *, follow_symlinks=True) Kopyalama ve yeniden adlandırma
In [9]: shutil.copyfile(src, dst)
IsADirectoryError: [Errno 21] Is a directory: ~/desktop'
#so dst should be a filename instead of a directory name
  1. shutil.copy() Meta verileri saklamadan kopyalama
In [10]: shutil.copy(src, dst)
Out[10]: ~/desktop/Head+First+SQL.pdf'
#check their metadata
In [25]: os.stat(src)
Out[25]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066425, st_mtime=1493698739, st_ctime=1514871215)
In [26]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf'))
Out[26]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066427, st_mtime=1516066425, st_ctime=1516066425)
# st_atime,st_mtime,st_ctime changed
  1. shutil.copy2() Meta verileri koruyarak kopyalama
In [30]: shutil.copy2(src, dst)
Out[30]: ~/desktop/Head+First+SQL.pdf'
In [31]: os.stat(src)
Out[31]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067055, st_mtime=1493698739, st_ctime=1514871215)
In [32]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf'))
Out[32]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067063, st_mtime=1493698739, st_ctime=1516067055)
# Preseved st_mtime
  1. shutil.copytree()

Hedef dizini döndürerek src'de köklenen tüm dizin ağacını yinelemeli olarak kopyalayın


1
shutil aslında dosyaları kopyalamaz. Orada docs üst kısmında kocaman bir uyarı sağ . "Bu, dosya sahibinin ve grubun ACL'lerin yanı sıra kaybolduğu anlamına gelir. Mac OS'de kaynak çatalı ve diğer meta veriler kullanılmaz. Bu, kaynakların kaybolacağı ve dosya türü ve içerik oluşturucu kodlarının doğru olmayacağı anlamına gelir. Windows'ta dosya sahipleri, ACL'ler ve alternatif veri akışları kopyalanmaz. "
gman

19

Küçük dosyalar ve yalnızca python yerleşiklerini kullanmak için aşağıdaki tek astarı kullanabilirsiniz:

with open(source, 'rb') as src, open(dest, 'wb') as dst: dst.write(src.read())

@Maxschlepzig Aşağıdaki yorum belirtildiği gibi, bu dosya çok büyük veya bellek kritik olduğunda, böylece uygulamalar için en uygun yol değildir Swati cevabı tercih edilmelidir.


3
Bu, geri yazmadan önce kaynak dosyanın tamamını belleğe okur. Böylece, bu gereksiz yere en küçük dosya kopyalama işlemleri dışındaki herkes için bellek boşa harcar.
maxschlepzig

1
Bu doğru mu? Bence .read()ve .write()varsayılan olarak arabelleğe alındı ​​(en azından CPython için).
soundstripe

@soundstripe, Tabii ki bu doğru. Tarafından döndürülen dosya nesnesinin open()varsayılan olarak IO arabelleğe alması, burada size yardımcı olmaz, çünkü read()'n negatif veya atlanmışsa, EOF'a kadar okuyun.' Bu read(), tüm dosya içeriğini dize olarak döndüreceği anlamına gelir .
maxschlepzig

@maxschlepzig Ne demek istediğimi anlıyorum ve farkında değildim. Bu yanıtı sağlamamın nedeni, birisinin bunun için bir modül almasına gerek kalmadan yalnızca yerleşikleri kullanarak basit bir dosya kopyası yapmak istemesiydi. Bu seçeneği istiyorsanız elbette bellek optimizasyonu endişe yaratmamalıdır. Her neyse bunu temizlediğiniz için teşekkür ederim. Cevabı buna göre güncelledim.
yellow01

14

Kullanabilirsin os.system('cp nameoffilegeneratedbyprogram /otherdirectory/')

ya da yaptığım gibi,

os.system('cp '+ rawfile + ' rawdata.dat')

nerede rawfileben programı içinde oluşturulan ettiğini adıdır.

Bu yalnızca Linux için bir çözümdür


10
Bu sadece taşınabilir değil ve gereksizdir çünkü shutil'i kullanabilirsiniz.
Corey Goldberg

4
shutilMevcut olmadığında bile - subprocess.run() (olmadan shell=True!) Daha iyi bir alternatiftir os.system().
maxschlepzig

1
shutil daha taşınabilir
Hiadore

1
subprocess.run()@maxschlepzig tarafından önerildiği gibi, harici programları çağırırken ileriye doğru büyük bir adımdır. Ancak esneklik ve güvenlik ['cp', rawfile, 'rawdata.dat']için komut satırını geçirme biçimini kullanın . (Ancak, kopyalama için shutilve harici bir programı çağırmak için arkadaşlara tavsiye edilir.)
Marcel Waldvogel

2
içinde boşluk olan dosya isimleri ile deneyin.
Jean-François Fabre

11

Büyük dosyalar için yaptığım şey dosyayı satır satır okumak ve her satırı bir diziye okumaktı. Ardından, dizi belirli bir boyuta ulaştığında, diziyi yeni bir dosyaya ekleyin.

for line in open("file.txt", "r"):
    list.append(line)
    if len(list) == 1000000: 
        output.writelines(list)
        del list[:]

2
yazar arabellekleme işlemesi gerektiğinden bu biraz gereksiz görünüyor. for l in open('file.txt','r'): output.write(l)iş bulmak gerekir; sadece çıkış akışı tamponunu ihtiyaçlarınıza göre ayarlayın. veya bir seferde yazmak istediğiniz bayt sayısının output.write(read(n)); output.flush()nerede nolduğu ile bir denemede döngü yaparak baytların üstesinden gelebilirsiniz . her ikisinin de hangi bonus olduğunu kontrol etmek için bir koşulu yoktur.
sahibi

1
Evet, ama bunun anlaşılması daha kolay olabileceğini düşündüm, çünkü parçaların yerine tüm satırları kopyalar (her satırın kaç bayt olduğunu bilmiyorsak).
ytpillai

Çok doğru. Öğretim için kodlama ve verimlilik için kodlama çok farklıdır.
sahibi

1
kaynağa baktığında - writelines write, hg.python.org/cpython/file/c6880edaf6f3/Modules/_io/bytesio.c diyor . Ayrıca, dosya akışı zaten açıktır, bu nedenle yazma işleminin her seferinde yeniden açması gerekmez.
sahibi

2
Bu çok kötü. İyi bir sebep olmadan gereksiz işler yapar. Rasgele dosyalar için çalışmaz. Girdinin Windows gibi sistemlerde olağandışı satır sonları varsa, kopya baytla aynı değildir. Neden bunu anlamanın bir kopyalama işlevine yapılan bir çağrıdan daha kolay olabileceğini düşünüyorsunuz shutil? Görmezden gelse bile shutil, basit bir blok okuma / yazma döngüsü (arabelleksiz IO kullanarak) doğrudan ileri, verimli ve bundan daha mantıklı olacaktır ve bu nedenle öğretilmesi ve anlaşılması kesinlikle daha kolaydır.
maxschlepzig

11
from subprocess import call
call("cp -p <file> <file>", shell=True)

10
Bu platforma bağlıdır, bu yüzden kullanmazdım.
Kevin Meier

5
Böyle bir callgüvenli değil. Lütfen bu konuda alt süreçlere başvurunuz.
buhtz

2
Bu sadece taşınabilir değil ve gereksizdir çünkü shutil'i kullanabilirsiniz.
Corey Goldberg

2
Hmm neden Python?
Baris Demiray

Belki başlamadan önce işletim sistemini tespit edin (DOS veya Unix olsun, çünkü bunlar en çok kullanılan iki tür)
MilkyWay90

8

İtibariyle Python 3.5 (: metin dosyaları, küçük jpegler yani) küçük dosyalar için aşağıdakileri yapabilirsiniz:

from pathlib import Path

source = Path('../path/to/my/file.txt')
destination = Path('../path/where/i/want/to/store/it.txt')
destination.write_bytes(source.read_bytes())

write_bytes hedefin bulunduğu yerin üzerine yazacak


2
Ve sonra birisi kodu (yanlışlıkla veya kasıtlı olarak) büyük bir dosyada kullanır shutil.
Marcel Waldvogel

4
en azından aynı çözümleri tekrar tekrar tekrarlamıyor.
Jean-François Fabre

6
open(destination, 'wb').write(open(source, 'rb').read())

Kaynak dosyayı okuma modunda açın ve hedef dosyaya yazma modunda yazın.


1
Fikir güzel ve kod güzel, ancak uygun bir copy () işlevi, kopyalama özellikleri (+ x bit) gibi daha fazla şey yapabilir veya örneğin disk dolu bir durum bulunduğu takdirde zaten kopyalanmış baytları silme .
Raúl Salinas-Monteagudo

1
Bir cümle olsa bile tüm cevapların açıklanması gerekir. Hiçbir açıklama kötü bir emsal teşkil etmez ve programı anlamada yardımcı olmaz. Tam bir Python noob gelip bunu gördüyse, kullanmak isteseydi ama anlayamadıkları için yapamazsa ne olurdu? Cevaplarınızdaki herkese yardımcı olmak istiyorsunuz.
Şarj cihazınızı

1
.close()Bunların hepsinde eksik değil open(...)mi?
luckydonald

.Close () öğesine gerek yoktur, çünkü dosya işaretçisi nesnesini hiçbir yerde DEPOLAMIYORUZ (ne src dosyası ne de hedef dosya için).
S471

1
Yellow01'in cevabı ile aynı yetersiz bellek israfı yaklaşımı .
maxschlepzig

-3

Python, İşletim Sistemi Kabuğu yardımcı programlarını kullanarak dosyaları kolayca kopyalamak için yerleşik işlevler sağlar.

Dosyayı Kopyalamak için aşağıdaki komut kullanılır

shutil.copy(src,dst)

MetaData Bilgileri ile Dosya Kopyalamak için aşağıdaki komut kullanılır

shutil.copystat(src,dst)

Dosya meta verilerini korumak için copydaha sonra çalıştırmalısınız copystat. Python 3.3+ sürümünde copystatgenişletilmiş öznitelikleri de kopyalar.
ingyhere
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.