하는 방법 파일을 복사에서는 파이썬

소개

올 때 사용하는 파이썬 파일을 복사하는 두 가지 방법이 있다:를 사용하는shutilososcopycp명령(Unix).

알 수 있는 많은 이러한 방법 모두에서shutilos모듈,매우 유사한 기능을(는 놀라운)지만,각각에 따라 기능을 서로에게서 매우 약간,나는 설명할 것이다뿐만 아니라.

shutil 모듈로 파일 복사

shutil 모듈은 파일을 복사하는 몇 가지 높은 수준의 방법을 제공합니다. 다음은 주요 사항입니다.

copyfile

이 방법은 한 파일의 내용을 다른 파일로 복사합니다. 제공된 대상은 쓰기 가능한 파일이어야 하며 소스 파일과 다른 이름을 가져야 합니다. 이름이 동일하면 오류가 발생합니다. 대상 파일이 이미 있는 경우 새로 복사된 파일로 대체됩니다.

에 대한 구문을 이 방법은 다음과 같다:

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

예를 들어,다음 코드는 복사본을 파일명”file1.txt”라는 파일에”file2.txt”:

import shutilshutil.copyfile('file1.txt', 'file2.txt')

하나의 재미있고 잠재적으로 유용한 기능의shutil.copyfilefollow_symlinksBoolean 인수입니다. 로 설정된 경우를False와 소스 파일을 상징하는 링크는 다음 대신에 파일을 복사하고,새로운 상징적 인 링크를 생성됩니다.

사본

이 방법은 매우 비슷한copyfile주요 차이점에 복사하는 것 외의 콘텐츠 소스 파일을 한 단계 더 나아가도 복사한 파일의 파일시스템 권한이 있습니다. 파일 권한을 복사하는 것은 대부분의 프로그래밍 언어에서 사소한 작업이 아니므로 멋진 기능입니다.

구문은 다음과 같습니다:

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

이러한 각 매개변수와 같은copyfile방법입니다. 예를 들어 다음 코드는”file1 을 복사합니다.txt”로”파일 3.txt”.

import shutilshutil.copy('file1.txt', 'file3.txt')

참고:당신은하지 않는 이름의 스크립트와 같이 하나의 모듈을 가져오(는 내가 잘못했는 코드를 테스트할 때 이에 대한 문서). 그렇게하면 순환 가져 오기 문제로 인해 해당 모듈을 가져 오려고 할 때 오류가 발생합니다.

copy2

으로 함께,이전의 방법을copy2copycopy2반환하지 않는 실패하고 보존하는 메타데이터를 수 있습니다.

이 구문은 다음과 같습니다:

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. 우리의 경우에,이것은 우리copycp명령입니다.

예를 들어 다음 코드는”file1 을 복사합니다.txt”로”파일 7.txt”

import os# Windowsos.system('copy file1.txt file7.txt')# Unixos.system('cp file1.txt file7.txt')

이 이전에 동일한os.popenos.system.wait()를 호출해야합니다.

파일을 복사와 함께 하위 프로세스 모듈

하위 프로세스 모듈을 교체하고자하는 몇 가지 방법을osos.systemos.spawn*callcheck_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 의 설정 방법이 있습니다. 다른 사람의 일부를 사용하는 파이썬의 강력한 방법을 실행하는 명령에 포탄을 활용하는 쉘 명령을 다음과 같copycp.

어느 것이 당신에게 옳은지 확실하지 않습니까? 우리는 여기에 파일을 복사하는 다른 방법을 많이 제시 했으므로 이해할 수 있습니다. 파일을 복사하는 데 사용하는 방법은 완전히 귀하에게 달려 있으며 귀하의 특정 요구에 따라 다릅니다. 대부분의 경우shutilshutil.copy2로 시작하여 필요한 작업을 수행하는지 확인하십시오.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다