Python'da bir dosyayı nasıl kopyalarım?


Alınan cevaba git


Python'da bir dosyayı nasıl kopyalarım?

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


2117





2008-09-23




Cevap sayısını say: 16






shutil kullanabileceğiniz birçok yöntem var. Bunlardan biri:

 from shutil import copyfile

copyfile(src, dst)
 

Adlı dosyanın içeriğini adlı src bir dosyaya kopyalayın dst . Hedef konum yazılabilir olmalıdır; Aksi takdirde, bir IOError istisna ortaya çıkacaktır. Eğer dst zaten var, bu değiştirilecektir. Karakter veya blok aygıtları ve borular gibi özel dosyalar bu işlevle kopyalanamaz. src ve dst dizge olarak verilen yol isimleridir.


2603


2008-09-23





 ┌──────────────────┬────────┬───────────┬───────┬────────────────┐
│     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       │
└──────────────────┴────────┴───────────┴───────┴────────────────┘
 

979


2015-05-20





copy2(src,dst) genellikle copyfile(src,dst) çünkü daha faydalıdır :

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

İşte 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
 

681


2008-09-23





Kopyalama işlevlerinden birini shutil paketten kullanabilirsiniz:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fonksiyon korur destekler diğer kopyaları kabul eder
                      izinler dizini dest. dosya obj meta verileri  
-------------------------------------------------- ----------------------------
shutil.copy               ✔ ✔ ☐ ☐
 shutil.copy2              ✔ ✔ ☐ ✔
 shutil.copyfile           ☐ ☐ ☐ ☐
 shutil.copyfileobj        ☐ ☐ ✔ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Örnek:

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

107


2017-07-09





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 istiyorsanız, bunun gibi 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)
 

91


2008-09-24





Python'da dosyaları kullanarak kopyalayabilirsiniz.


 import os
import shutil
import subprocess
 

1) shutil Modü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) os Modü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) subprocess Modül kullanarak dosyaları kopyalamak

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)
 


79


2018-01-22





Kapatma 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. Eğer dst zaten varsa, değiştirilecektir. Karakter veya blok aygıtları ve borular gibi özel dosyalar bu işlevle kopyalanamaz. src ve dst, dizge olarak verilen yol isimleridir.

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


64


2008-09-23





Dizin ve Dosya kopyası örneği - Tim Golden'in Python Eşyalarından:

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"
 

45


2011-03-15





İlk olarak, referans için kapsamlı bir kapatma yöntemleri hazırladı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, örneklemlerde kopya yöntemlerini açıklayın:

  1. shutil.copyfileobj(fsrc, fdst[, length]) açılan nesneleri işlemek
 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) Kopyala ve yeniden adlandır
 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 sağlamadan 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 sunarak kopyala
 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 dizininde yer alan tüm bir dizin ağacını tekrar tekrar kopyalayın


17


2018-01-16





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

ya da yaptığım gibi

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

rawfile program içerisinde oluşturduğum isim nerede .

Bu sadece Linux bir çözümdür


15


2014-12-19





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

 with open(source, 'r') as src, open(dest, 'w') 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.


15


2017-08-15





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

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

12


2015-05-25





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

11


2016-04-04





İ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 konumunda olanın üzerine yazacak


5


2019-04-25





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

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


3


2019-03-23





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 Bilgisi ile Dosya Kopyalamak için aşağıdaki komut kullanılır

 shutil.copystat(src,dst)
 

-4


2019-06-10