소개
올 때 사용하는 파이썬 파일을 복사하는 두 가지 방법이 있다:를 사용하는shutil
os
os
copy
cp
명령(Unix).
알 수 있는 많은 이러한 방법 모두에서shutil
os
모듈,매우 유사한 기능을(는 놀라운)지만,각각에 따라 기능을 서로에게서 매우 약간,나는 설명할 것이다뿐만 아니라.
shutil 모듈로 파일 복사
shutil 모듈은 파일을 복사하는 몇 가지 높은 수준의 방법을 제공합니다. 다음은 주요 사항입니다.
copyfile
이 방법은 한 파일의 내용을 다른 파일로 복사합니다. 제공된 대상은 쓰기 가능한 파일이어야 하며 소스 파일과 다른 이름을 가져야 합니다. 이름이 동일하면 오류가 발생합니다. 대상 파일이 이미 있는 경우 새로 복사된 파일로 대체됩니다.
에 대한 구문을 이 방법은 다음과 같다:
shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)
예를 들어,다음 코드는 복사본을 파일명”file1.txt”라는 파일에”file2.txt”:
import shutilshutil.copyfile('file1.txt', 'file2.txt')
하나의 재미있고 잠재적으로 유용한 기능의shutil.copyfile
follow_symlinks
Boolean 인수입니다. 로 설정된 경우를False
와 소스 파일을 상징하는 링크는 다음 대신에 파일을 복사하고,새로운 상징적 인 링크를 생성됩니다.
사본
이 방법은 매우 비슷한copyfile
주요 차이점에 복사하는 것 외의 콘텐츠 소스 파일을 한 단계 더 나아가도 복사한 파일의 파일시스템 권한이 있습니다. 파일 권한을 복사하는 것은 대부분의 프로그래밍 언어에서 사소한 작업이 아니므로 멋진 기능입니다.
구문은 다음과 같습니다:
shutil.copy(src_file, dest_file, *, follow_symlinks=True)
이러한 각 매개변수와 같은copyfile
방법입니다. 예를 들어 다음 코드는”file1 을 복사합니다.txt”로”파일 3.txt”.
import shutilshutil.copy('file1.txt', 'file3.txt')
참고:당신은하지 않는 이름의 스크립트와 같이 하나의 모듈을 가져오(는 내가 잘못했는 코드를 테스트할 때 이에 대한 문서). 그렇게하면 순환 가져 오기 문제로 인해 해당 모듈을 가져 오려고 할 때 오류가 발생합니다.
copy2
으로 함께,이전의 방법을copy2
copy
copy2
반환하지 않는 실패하고 보존하는 메타데이터를 수 있습니다.
이 구문은 다음과 같습니다:
shutil.copy2(src_file, dest_file, *, follow_symlinks=True)
다시,이러한 매개 변수는 동일 이전에 명령을 우리가 언급했다.
예를 들어 다음 코드는”file1 을 복사합니다.txt”로”파일 4.txt”뿐만 아니라 원본 파일의 메타 데이터를 보존,”file1.txt”.
import shutilshutil.copy2('file1.txt', 'file4.txt')
$ python copy-files.py $ ls -ltotal 32-rw-r--r-- 1 scott staff 91 Oct 27 11:26 copy-files.py-rw-r--r-- 1 scott staff 6 Oct 27 11:27 file1.txt-rw-r--r-- 1 scott staff 6 Oct 27 11:29 file3.txt-rw-r--r-- 1 scott staff 6 Oct 27 11:27 file4.txt
위의 코드 실행에서 볼 수 있듯이”file1.txt”는”file4 로 복사되었습니다.txt”. 그러나”file1 을 복사 한shutil.copy
와 달리 새 파일에 생성 날짜가 보존되었음을 알았을 수 있습니다.txt”to”file3.txt”하고 새로운 생성 날짜를주었습니다.
copyfileobj
이 방법을 사본의 콘텐츠 소스 파일을 파일에 현재의 소스 파일의 위치입니다. 이것이 의미하는 것을 읽을 경우에서 데이터 소스 파일의 개체,그 위치를 읽기를 중지에 위치copyfileobj
복사가 시작됩니다.
이 구문은 다음과 같습니다:
shutil.copyfileobj(src_file_object, dest_file_object)
의미의 소스 및 대상 파일이 매개 변수가 비슷한 이전을 명령하지만,지금,그들은 그를 참조하다. Length 매개 변수는 선택 사항 및 버퍼 크기를 나타냅는 수의 물을 유지 메모리에 복사하는 동안 프로세스. 이 옵션이 유용할 수 있습을 복사할 때 매우 큰 파일을 수 있으므로,속도를 복사 프로세스 및 방지하 제어되지 않은 메모리를 사용합니다.
예를 들어 다음 코드는”file1 을 복사합니다.txt”로”파일 5.txt”
import shutilfilename1 = 'file1.txt'fileA = open(filename1, 'rb')filename2 = 'file5.txt'fileB = open(filename2, 'wb')shutil.copyfileobj(fileA, fileB)
우리가 볼 수있는 바와 같이,사용하기 위해서copyfileobj
,우리가 필요한 열에 있는 파일을 바이너리 모드(는”b”part of”rb”및”wb”). 또한 소스 파일을 열어야 합로 읽을 수 있는 목적지와 파일을 열어야 합로 쓰기(“r”과”w”부품,각각).
os 모듈로 파일 복사
os 모듈은 운영 체제 기능을 사용하여 파일을 복사하는 방법을 제공합니다. 여기에서 대부분의 예제(전부는 아님)에서 Windows 와 Unix 모두에서 작동하는 예제를 제공합니다. 사용 된 쉘 명령으로 인해 예제가 다르므로 각 함수 호출이 파이썬 주석에 레이블이 지정되는 방법에주의를 기울여야합니다.
popen
이 방법은 명령 또는 명령에서 파이프를 엽니 다. 그러나이 방법은 파이썬 2.6 에서 더 이상 사용되지 않았으므로 사용하지 않는 것이 좋습니다. 대안으로,파이썬 문서는 우리가 대신 서브 프로세스 모듈의 메소드를 사용하도록 조언합니다.
이 구문은 다음과 같습니다:
os.popen(cmd])
여기에서 반환된 값은 파일체에 연결되어 있는 파이프입니다. 이 객체는 모드에 따라 읽거나 쓸 수 있습니다. 기본 모드는 파일 내용을 읽을 수있는’r’입니다.
아래의 예는”file1 을 복사합니다.txt”로”file6.txt”:
import os# Windowsos.popen('copy file1.txt file6.txt')# Unixos.popen('cp file1.txt file6.txt')
명령을 실행에 이 방법은 정확히 동일한으로 실행한 경우에는 직접 명령행에서 당신의 터미널도 있습니다.
system
이 메소드는 서브 쉘에서 지정된 명령을 실행합니다. 그것은 유닉스와 윈도우 모두에 사용할 수 있습니다. 구문은 다음과 같습니다:
os.system(command)
여기에는command
문자열이 포함된 DOS 또는 Unix shell command. 우리의 경우에,이것은 우리copy
cp
명령입니다.
예를 들어 다음 코드는”file1 을 복사합니다.txt”로”파일 7.txt”
import os# Windowsos.system('copy file1.txt file7.txt')# Unixos.system('cp file1.txt file7.txt')
이 이전에 동일한os.popen
os.system
.wait()
를 호출해야합니다.
파일을 복사와 함께 하위 프로세스 모듈
하위 프로세스 모듈을 교체하고자하는 몇 가지 방법을os
os.system
os.spawn*
call
check_output
입니다. 다시 한 번 Unix 시스템의 경우”file1 복사.txt 파일 2.txt”는”cp file1 로 대체되어야합니다.txt 파일 2.txt”.
call Method
Python 설명서에서는call
메서드를 사용하여 운영 체제에서 명령을 시작할 것을 권장합니다.
이 구문은 다음과 같습니다:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
args
매개 변수를 포함됩니다 우리의 쉘이 명령입니다. 그러나 Python 설명서에서shell=True
를 사용하면 보안 위험이 될 수 있다고 경고하므로주의해야합니다.
이 함수 호출을 사용하여 다음과 같이 복사 명령을 실행할 수 있습니다:
import subprocess# Windowsstatus = subprocess.call('copy file1.txt file8.txt', shell=True)# Unixstatus = subprocess.call('cp file1.txt file8.txt', shell=True)
으로 위의 예를 보여줍,우리는 단순히 필요로하는 문자열을 전달 쉘 명령을 전하고 있습니다.
그리고 예상대로 운영 체제는”file1 을 복사합니다.txt”라는 파일에”file8.txt”.
check_output 방법
이 방법 또한 우리 내에서 명령을 실행합니다. 기본적으로 stdout 의 데이터를 인코딩 된 바이트로 파이프한다는 점을 제외하고는subprocess.run
명령과 매우 흡사합니다. 구문은 다음과 같습니다:
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
여기에는args
매개 변수를 포함한 쉘 명령을 우리가 사용하고 싶습니다. 다시 한번,Python 문서는shell=True
를 사용한다고 경고하므로이 방법을주의해서 사용하십시오.
다음 코드에서”file1 을 복사합니다.txt”to”file9.txt”를 사용하는check_output
명령:
import subprocess# Windowsstatus = subprocess.check_output('copy file1.txt file9.txt', shell=True)# Unixstatus = subprocess.check_output('cp file1.txt file9.txt', shell=True)
으로 모든 명령을 우리는 다음과 같 이 문서에서는 이 파일을 복사”file1.txt”우리가 지정한 대상에,이는”file9.txt”여기.
포장
Python 우리를 제공하는 많은 다른 방법으로 파일을 복사 중 일부는 부분의 Python 의 설정 방법이 있습니다. 다른 사람의 일부를 사용하는 파이썬의 강력한 방법을 실행하는 명령에 포탄을 활용하는 쉘 명령을 다음과 같copy
cp
.
어느 것이 당신에게 옳은지 확실하지 않습니까? 우리는 여기에 파일을 복사하는 다른 방법을 많이 제시 했으므로 이해할 수 있습니다. 파일을 복사하는 데 사용하는 방법은 완전히 귀하에게 달려 있으며 귀하의 특정 요구에 따라 다릅니다. 대부분의 경우shutil
shutil.copy2
로 시작하여 필요한 작업을 수행하는지 확인하십시오.