파이썬에서 파일을 어떻게 복사합니까?


2475

파이썬에서 파일을 어떻게 복사합니까?

에서 찾을 수 없습니다 os.


117
cp는 시스템 호출이 아니므로 os 모듈에 속하지 않습니다. 쉘 명령이므로 shutil 모듈에 넣습니다.
waldol1

답변:


3006

shutil사용할 수있는 방법이 많이 있습니다. 그 중 하나는 다음과 같습니다.

from shutil import copyfile
copyfile(src, dst)
  • src 파일의 내용을 dst 파일로 복사하십시오 .
  • 대상 위치는 쓰기 가능해야합니다. 그렇지 않으면 IOError 예외가 발생합니다.
  • 경우 DST가 이미 존재, 그것은 대체됩니다.
  • 문자 또는 블록 장치 및 파이프와 같은 특수 파일은이 기능으로 복사 할 수 없습니다.
  • 으로 복사 , SRCDST 로 주어진 경로 이름입니다 문자열 .

당신이 사용하는 경우 os.path작업을 사용 copy하기보다는 copyfile. copyfile것입니다 만 문자열을 받아 들일 .


147
복사 파일과 복사 파일의 차이점은 무엇입니까?
Matt

385
copy (src, dst)에서 dst는 디렉토리 일 수 있습니다.
Owen

41
플랫폼에 따라 모든 메타 데이터가 복사되는 것은 아닙니다.
Kevin Horn

12
원 자성 작업이 아닙니다. 스레드 응용 프로그램에서 사용하는 것을주의하십시오.
바이트

4
다음과 같은 약어를 처리 ~할 수 없지만 상대 경로를 처리 할 수 ​​있습니다.
zwep

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)종종 다음보다 더 유용합니다 copyfile(src,dst).

  • 그것은 수 dst디렉토리 (대신의 전체 대상 파일 이름을)하는 경우에는 기본 이름src새 파일을 만드는 데 사용됩니다;
  • 파일 메타 데이터의 원래 수정 및 액세스 정보 (mtime 및 atime)를 유지하지만 약간의 오버 헤드가 발생합니다.

다음은 간단한 예입니다.

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
1 백만 개의 파일에서 100k 파일을 무작위로 복사하려고합니다. copyfile보다 빠른 속도copy2
Vijay

4
" shutil.copy2('/dir/file.ext', '/new/dir/')대상"경로 뒤에 슬래시를 사용하여 "dir"이라는 새 파일로 복사 할 것인지 또는 해당 이름의 디렉토리에 파일을 넣을 것인지에 대한 모호성을 제거 한다고 가정하는 것이 맞 습니까?
Zak

1
@Vijay 나는이 오버 헤드가 메타 데이터를 복사하기 때문이라고 생각합니다.
Jonathan H

@Zak /new/dir기존 디렉토리 인 경우 모호성이 없습니다 . @MatthewAlpert의 의견을 참조하십시오.
Jonathan H

@Zak 맞습니다. 끝에 슬래시를 추가하면 모호성이 제거됩니다. 경우 /new/dir/존재하지 않는, 파이썬은 발생합니다 IsADirectoryError에, 그렇지 않으면 복사 파일을 /new/dir/원래의 이름으로.
martonbognar 2016 년

125

shutil패키지 에서 복사 기능 중 하나를 사용할 수 있습니다 .

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
유지 기능은 다른 사본을 허용합니다.
                      권한 디렉토리 대상. 파일 obj 메타 데이터  
―――――――――――――――――――――――――――――――――――――――――――――――――――――― ――――――――――――――――――――――――――――――
shutil.copy               ✔ ✔ ☐ ☐
 shutil.copy2              ✔ ✔ ☐ ✔
 shutil.copyfile           ☐ ☐ ☐ ☐
 shutil.copyfileobj        ☐ ☐ ✔ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

예:

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

10
궁금한 점은 어떻게 테이블을 생성 했습니까?
lightalchemist

16
@lightalchemist 방금 vim을 스크래치 패드로 사용하고 wikipedia 테이블에서 사용 된 유니 코드 기호를 복사하고 최종 연마를 위해 결과를 stackoverflow 편집기로 복사했습니다.
maxschlepzig

3
2 년 전의 다른 답변과 다른 점은 무엇입니까? stackoverflow.com/a/30359308/674039
wim

1
@ wim, 내 답변을 내 답변을 게시 할 때 현재 연결된 2017 버전의 답변과 비교해야합니다 . 주요 차이점 : 내 대답은 더 나은 / 더 설명적인 열 머리글을 사용하고 테이블 레이아웃이 산만하지 않으며 문서에 직접 링크가 포함되어 있으며 열을 추가했습니다 (예 : '파일 obj 수락).
maxschlepzig 21시 58 분

4
확인. YMMV, 그러나 외관상의 변화와 그와 같은 사소한 개선은 답변의 중복이 아니라 기존 답변의 편집으로 더 나은 것으로 생각합니다.
wim

104

파이썬에서는 다음을 사용하여 파일을 복사 할 수 있습니다


import os
import shutil
import subprocess

1) shutil모듈을 이용한 파일 복사

shutil.copyfile 서명

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

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

shutil.copy 서명

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

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

shutil.copy2 서명

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

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

shutil.copyfileobj 서명

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모듈을 이용한 파일 복사

os.popen 서명

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 서명

os.system(command)


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

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

3) subprocess모듈을 이용한 파일 복사

subprocess.call 서명

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 서명

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
단일 문자열 명령을 사용하는 것은 코딩 스타일 (유연성, 안정성 및 보안)이 좋지 않으며 ['copy', sourcefile, destfile], 특히 매개 변수가 사용자 입력에서 제공되는 경우 가능하면 구문 을 사용 하십시오.
Marcel Waldvogel

8
Shutil Copy 기능에 대한 많은 나쁜 대안을 왜 나열합니까?
maxschlepzig

6
shutil은 내장되어 있으며 이식성이없는 대안을 제공 할 필요가 없습니다. 시스템 종속 솔루션을 제거하여 실제로 대답을 개선 할 수 있으며, 그 제거 후이 답변은 기존 답변 사본 / 문서 사본 일뿐입니다.
Jean-François Fabre

3
os.popen한동안 더 이상 사용되지 않습니다. 및 check_output상태지만 (의 경우 비어있는 출력을 반환하지 않습니다 copy/cp)
장 - 프랑수아 파브르

2
shutil은 실제로 파일을 복사하지 않습니다. 문서 상단에 큰 뚱뚱한 경고 가 있습니다 . "이것은 ACL뿐만 아니라 파일 소유자와 그룹도 손실됨을 의미합니다. Mac OS에서는 리소스 포크 및 기타 메타 데이터가 사용되지 않습니다. 즉, 리소스가 손실되고 파일 형식과 작성자 코드가 올바르지 않습니다. Windows에서는 파일 소유자, ACL 및 대체 데이터 스트림은 복사되지 않습니다. "
gman

96

파일 복사는 아래 예제와 같이 비교적 간단한 작업이지만 대신 shutil stdlib 모듈 을 사용해야합니다.

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)

파일 이름으로 복사하려면 다음과 같이하십시오.

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
나는 얼마 전에 모듈이 또 shutil (단수)가 아닌 shutils (복수)라고 눈치, 실제로 그것은 이다 파이썬 2.3. 그럼에도 불구하고 나는이 기능을 예로 남겨 둡니다.
pi.

4
파일 내용을 복사하는 것은 간단합니다. 메타 데이터를 사용하여 파일을 복사하는 것은 단순하지만 크로스 플랫폼을 원한다면 훨씬 더 간단합니다.
LaC

3
진실. shutil 문서를 보면 copyfile 함수는 메타 데이터도 복사하지 않습니다.
pi.

3
예, 왜 소스를 복사하지 않는지 잘 모르겠습니다 shutil.copyfileobj. 또한 try, finally예외 후에 파일 닫기를 처리 할 필요가 없습니다 . 그러나 나는 함수가 파일을 열고 닫는 책임을지지 않아야한다고 말하고 싶습니다. shutil.copyfilewraps 와 같은 래퍼 함수에 있어야합니다 shutil.copyfileobj.
ErlVolton

2
위의 코드는 dest쓰기 가능하도록 지정 해야합니다.open(dest, 'wb')
user1016274

69

shutil 모듈을 사용하십시오 .

copyfile(src, dst)

src라는 파일의 내용을 dst라는 파일로 복사하십시오. 대상 위치는 쓰기 가능해야합니다. 그렇지 않으면 IOError 예외가 발생합니다. dst가 이미 존재하면 교체됩니다. 문자 또는 블록 장치 및 파이프와 같은 특수 파일은이 기능으로 복사 할 수 없습니다. src 및 dst는 문자열로 지정된 경로 이름입니다.

표준 Python 모듈에서 사용 가능한 모든 파일 및 디렉토리 처리 기능에 대해서는 filesys 를 살펴보십시오 .


shutil은 실제로 파일을 복사하지 않습니다. 문서 상단에 큰 뚱뚱한 경고 가 있습니다 . "이것은 ACL뿐만 아니라 파일 소유자와 그룹도 손실됨을 의미합니다. Mac OS에서는 리소스 포크 및 기타 메타 데이터가 사용되지 않습니다. 즉, 리소스가 손실되고 파일 형식과 작성자 코드가 올바르지 않습니다. Windows에서는 파일 소유자, ACL 및 대체 데이터 스트림은 복사되지 않습니다. "
gman

47

디렉토리 및 파일 복사 예제-Tim Golden의 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"

24

먼저, 나는 당신의 참고를 위해 철저한 셔틀 메소드 치트 시트를 만들었습니다.

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',]
}

둘째, exmaples에서 복사 방법을 설명하십시오.

  1. shutil.copyfileobj(fsrc, fdst[, length]) 열린 객체 조작
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) 복사 및 이름 바꾸기
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() 메타 데이터를 미리 보지 않고 복사
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() 메타 데이터를 미리 삽입하여 복사
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()

src를 기반으로하는 전체 디렉토리 트리를 재귀 적으로 복사하여 대상 디렉토리를 리턴합니다.


1
shutil은 실제로 파일을 복사하지 않습니다. 문서 상단에 큰 뚱뚱한 경고 가 있습니다 . "이것은 ACL뿐만 아니라 파일 소유자와 그룹도 손실됨을 의미합니다. Mac OS에서는 리소스 포크 및 기타 메타 데이터가 사용되지 않습니다. 즉, 리소스가 손실되고 파일 형식과 작성자 코드가 올바르지 않습니다. Windows에서는 파일 소유자, ACL 및 대체 데이터 스트림은 복사되지 않습니다. "
gman

19

작은 파일과 파이썬 내장 기능 만 사용하는 경우 다음의 한 줄짜리를 사용할 수 있습니다.

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

아래 주석에 언급 된 @ maxschlepzig와 같이 파일이 너무 크거나 메모리가 중요한 응용 프로그램에는 최적의 방법이 아니므로 Swati의 대답이 선호됩니다.


3
다시 작성하기 전에 전체 소스 파일을 메모리로 읽습니다. 따라서 이것은 가장 작은 파일 복사 작업을 제외한 모든 메모리를 불필요하게 낭비합니다.
maxschlepzig 7

1
그게 사실입니까? 나는 생각 .read()하고 .write()기본적으로 버퍼링되어 있습니다 (적어도 CPython의 경우).
soundstripe

@soundstripe, 물론 이것은 사실입니다. 에 의해 반환되는 파일 객체는 사실 open()때문에 기본적으로 IO를 버퍼링 않습니다가, 여기에 도움이되지 않습니다 read()으로 지정됩니다 '. n은 부정적이나, EOF 때까지 읽기를 생략하면' 즉 read(), 전체 파일 내용을 문자열로 반환합니다.
maxschlepzig

@maxschlepzig 나는 당신의 요점을 알았고 그것을 알지 못했다는 것을 인정합니다. 내가이 답변을 제공 한 이유는 누군가가 모듈을 가져올 필요없이 내장 기능 만 사용하여 간단한 파일 복사를 수행하려는 경우였습니다. 물론이 옵션을 원한다면 메모리 최적화는 문제가되지 않습니다. 어쨌든 그것을 해결해 주셔서 감사합니다. 이에 따라 답변을 업데이트했습니다.
yellow01

14

당신은 사용할 수 있습니다 os.system('cp nameoffilegeneratedbyprogram /otherdirectory/')

또는 내가 한 것처럼

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

rawfile프로그램 내에서 생성 한 이름은 어디에 있습니까 ?

이것은 Linux 전용 솔루션입니다


10
이것은 휴대용이 아니며, shutil을 사용할 수 있기 때문에 불필요합니다.
Corey Goldberg

4
shutil사용할 수없는 경우에도 subprocess.run() ( shell=True! 없이 )가 더 나은 대안 os.system()입니다.
maxschlepzig

1
shutil은 더 휴대가 편리합니다
Hiadore

1
subprocess.run()@maxschlepzig가 제안한 것처럼 외부 프로그램을 호출 할 때 큰 발전입니다. 그러나 유연성과 보안 ['cp', rawfile, 'rawdata.dat']을 위해 명령 행을 전달하는 형식을 사용하십시오 . (단, shutil외부 프로그램을 호출하는 것보다 복사 및 친구에게 권장됩니다.)
Marcel Waldvogel

2
공백이있는 파일 이름으로 시도하십시오.
Jean-François Fabre

11

큰 파일의 경우 파일을 한 줄씩 읽고 각 줄을 배열로 읽습니다. 그런 다음 배열이 특정 크기에 도달하면 새 파일에 추가하십시오.

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

2
라이터가 버퍼링을 처리해야하므로 약간 중복되는 것 같습니다. for l in open('file.txt','r'): output.write(l)찾아야한다. 출력 스트림 버퍼를 필요에 맞게 설정하십시오. 또는 한 번에 쓰고 싶은 바이트 수는 output.write(read(n)); output.flush()어디 에서 try를 반복하여 바이트 수만큼 갈 수 있습니다 n. 둘 다 또한 어느 것이 보너스인지 확인할 조건이 없습니다.
소유 함

1
예,하지만 각 줄이 몇 바이트인지 모르는 경우 일부 줄이 아닌 전체 줄을 복사하기 때문에 이해하기가 더 쉽다고 생각했습니다.
ytpillai 2016 년

매우 사실입니다. 교육을위한 코딩과 효율성을위한 코딩은 매우 다릅니다.
소유

1
소스 -writelines를 보면 write, hg.python.org/cpython/file/c6880edaf6f3/Modules/_io/bytesio.c를 호출합니다 . 또한 파일 스트림이 이미 열려 있으므로 매번 다시 쓸 필요가 없습니다.
소유 함

2
이것은 끔찍하다. 정당한 이유없이 불필요한 작업을 수행합니다. 임의의 파일에는 작동하지 않습니다. Windows와 같은 시스템에서 입력에 비정상적인 줄 끝이 있으면 복사본은 바이트와 동일하지 않습니다. 왜 복사 기능을 호출하는 것보다 이해하기 쉽다고 생각 shutil합니까? 무시할 때에도 shutil(버퍼링되지 않은 IO를 사용하는) 간단한 블록 읽기 / 쓰기 루프는 간단하고 효율적이며 이보다 훨씬 더 의미가있어 가르치고 이해하기가 더 쉽습니다.
maxschlepzig

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

10
이것은 플랫폼에 따라 다르므로 사용하지 않을 것입니다.
Kevin Meier

5
그러한 call것은 안전하지 않습니다. 이에 대한 서브 프로세스 문서를 참조하십시오.
buhtz

2
이것은 휴대용이 아니며, shutil을 사용할 수 있기 때문에 불필요합니다.
Corey Goldberg

2
흠 왜 파이썬인가?
Baris Demiray

시작하기 전에 운영 체제를 감지했을 수도 있습니다 (DOS 또는 유닉스에 관계없이 가장 많이 사용되기 때문에)
MilkyWay90

8

현재 파이썬 3.5 (: 텍스트 파일, 작은 사진과 예) 당신은 작은 파일에 대해 다음 작업을 수행 할 수 있습니다 :

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 대상 위치에 있던 모든 것을 덮어 씁니다.


2
그리고 누군가가 큰 파일에 실수로 또는 의도적으로 코드를 사용하는 경우… 함수를 사용하면 shutil모든 특수한 경우를 처리하고 마음의 평화를 얻을 수 있습니다.
Marcel Waldvogel

4
적어도 동일한 솔루션을 반복해서 반복하지는 않습니다.
Jean-François Fabre

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

소스 파일을 읽기 모드로 열고 대상 파일에 쓰기 모드로 씁니다.


1
아이디어는 훌륭하고 코드는 아름답지만 적절한 copy () 함수는 속성 복사 (+ x 비트) 또는 디스크 가득 참 조건이 발견 된 경우 이미 복사 된 바이트 삭제와 같은 더 많은 작업을 수행 할 수 있습니다. .
Raúl Salinas-Monteagudo

1
한 문장이라도 모든 답변에는 설명이 필요합니다. 나쁜 선례를 설명하는 설명이 없으며 프로그램을 이해하는 데 도움이되지 않습니다. 완전한 파이썬 멍청한 놈이 와서 이것을보고 그것을 사용하고 싶었지만 그것을 이해하지 못했기 때문에 어떻게 할 수 있습니까? 당신은 당신의 대답에 모두에게 도움이되기를 원합니다.
connectyourcharger

1
.close()그 모든 것을 놓치고 있지 open(...)않습니까?
luckydonald

파일 포인터 객체를 src 파일이나 대상 파일 모두에 저장하지 않으므로 .close ()가 필요하지 않습니다.
S471

1
yellow01의 답변 과 동일한 차선 메모리 낭비 접근법 .
maxschlepzig

-3

Python은 운영 체제 셸 유틸리티를 사용하여 파일을 쉽게 복사 할 수있는 내장 함수를 제공합니다.

다음 명령은 파일을 복사하는 데 사용됩니다

shutil.copy(src,dst)

다음 명령은 메타 데이터 정보가있는 파일을 복사하는 데 사용됩니다

shutil.copystat(src,dst)

copy그런 다음 copystat파일 메타 데이터를 보존하기 위해 실행해야합니다 . Python 3.3 copystat이상에서는 확장 된 속성도 복사합니다.
ingyhere
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.