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

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

에서 찾을 수 없습니다 os.



답변

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

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

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


답변

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


답변

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


답변

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

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

예:

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


답변

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


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)


답변

파일 복사는 아래 예제와 같이 비교적 간단한 작업이지만 대신 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)


답변

shutil 모듈을 사용하십시오 .

copyfile(src, dst)

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

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