Vraag Hoe kopieer ik een bestand in python?


Hoe kopieer ik een bestand in Python? Ik kon niets vinden onder os.


1457
2017-09-23 19:23


oorsprong


antwoorden:


shutil heeft veel methoden die je kunt gebruiken. Een daarvan is:

from shutil import copyfile

copyfile(src, dst)

Kopieer de inhoud van het bestand met de naam src naar een bestand met de naam dst. De bestemmingslocatie moet schrijfbaar zijn; anders, een IOError uitzondering zal worden verhoogd. Als dst bestaat al, het zal worden vervangen. Speciale bestanden zoals tekens of blokapparaten en leidingen kunnen niet met deze functie worden gekopieerd. src en dst zijn padnamen die als tekenreeks worden gegeven.


1770
2017-09-23 19:25



-----------------------------------------------------------------------------------
| Function          |Copies Metadata|Copies Permissions|Can Use Buffer|Dest Dir OK
-----------------------------------------------------------------------------------
| shutil.copy       |      No       |        Yes       |      No      |    Yes
-----------------------------------------------------------------------------------
| shutil.copyfile   |      No       |        No        |      No      |    No
-----------------------------------------------------------------------------------
| shutil.copy2      |      Yes      |        Yes       |      No      |    Yes
-----------------------------------------------------------------------------------
| shutil.copyfileobj|      No       |        No        |      Yes     |    No
-----------------------------------------------------------------------------------

549
2018-05-20 20:01



copy2(src,dst) is vaak nuttiger dan copyfile(src,dst) omdat:

  • het staat toe dst een ... zijn directory (in plaats van de volledige doelbestandsnaam), in welk geval de basename van src wordt gebruikt voor het maken van het nieuwe bestand;
  • het bewaart de originele modificatie en toegangsinformatie (mtime en atime) in de bestandsmetadata (dit komt echter met een lichte overhead).

Hier is een kort voorbeeld:

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

547
2017-09-23 19:29



Het kopiëren van een bestand is een relatief eenvoudige bewerking, zoals te zien is in de onderstaande voorbeelden, maar u zou in plaats daarvan de shutil stdlib-module daarom.

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)

Als je op bestandsnaam wilt kopiëren, zou je zoiets als dit kunnen doen:

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)

73
2017-09-24 07:21



Gebruik de sluitmodule.

copyfile(src, dst)

Kopieer de inhoud van het bestand met de naam src naar een bestand met de naam dst. De bestemmingslocatie moet schrijfbaar zijn; anders wordt een IOError-uitzondering gegenereerd. Als dst al bestaat, wordt deze vervangen. Speciale bestanden zoals tekens of blokapparaten en leidingen kunnen niet met deze functie worden gekopieerd. src en dst zijn padnamen die als strings worden weergegeven.

Kijk eens naar filesys voor alle bestands- en mapafhandelingsfuncties die beschikbaar zijn in standaard Python-modules.


47
2017-09-23 19:27



U kunt een van de kopieerfuncties van de. Gebruiken shutil pakket:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Function preserves ondersteunt ondersteunt andere kopieën
                      permissies directory dest. bestand obj metadata
-------------------------------------------------- ----------------------------
shutil.copy                                            ☐ ☐
shutil.copy2                                           ☐
shutil.copyfile          ☐ ☐ ☐ ☐
shutil.copyfileobj       ☐ ☐ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Voorbeeld:

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

40
2017-07-09 11:50



Voorbeeld van directory en bestandskopie - Van Tim Golden's Python Stuff:

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"

36
2018-03-15 10:11



Kijk naar de module shutil. Het bevat functie Kopieer bestand(src, dst)


21
2017-09-23 19:27



In Python kun je de bestanden kopiëren met


import os
import shutil
import subprocess

1) Bestanden kopiëren met behulp van shutil module

shutil.copyfile  handtekening

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

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

shutil.copy  handtekening

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

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

shutil.copy2  handtekening

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

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

shutil.copyfileobj  handtekening

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) Bestanden kopiëren met os module

os.popen  handtekening

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  handtekening

os.system(command)


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

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

3) Bestanden kopiëren met subprocess module

subprocess.call  handtekening

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  handtekening

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)


19
2018-01-22 03:05



Je zou kunnen gebruiken os.system('cp nameoffilegeneratedbyprogram /otherdirectory/')

of zoals ik het deed,

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

waar rawfile is de naam die ik in het programma had gegenereerd.

Dit is een Linux-only-oplossing


13
2017-12-19 23:18