python 디 렉 터 리 복 제 를 위 한 세 가지 소결
방법:재 귀,깊이 옮 겨 다 니 기,넓이 옮 겨 다 니 기
깊이 스 트 리밍&넓이 스 트 리밍:
생각:
1.원본 디 렉 터 리 하위 디 렉 터 리 를 가 져 오고 대상 디 렉 터 리 의 하위 경로 설정
1.1 여기 서 두 개의 스 택(또는 대기 열)을 만 들 고 원래 디 렉 터 리 와 대상 디 렉 터 리 를 각각 스 택(또는 대기 열)에 추가 합 니 다.보통 append 로 추가 합 니 다.스 택 의 맨 위,대기 열의 뒷부분 에 추가 합 니 다.
1.2 깊이 는 스 택 의 상단 에서 원 경 로 를 꺼 내 판단 하 는 동시에 같은 방식 으로 대상 경 로 를 꺼 낼 수 있 습 니 다(스 택 과 대기 열 은 모두 list 와 유사 하 며 list 로 실현 할 수 있 습 니 다)
대기 열 앞에서 원 경 로 를 꺼 내 판단 하 는 동시에 같은 방식 으로 목표 경 로 를 꺼 냅 니 다.
2.원자 급 경로 가 파일 인지 판단
2.1 대상 하위 파일 이 존재 하지 않 거나 대상 하위 파일 이 존재 하지만 하위 파일 크기 가 일치 하지 않 으 면 복사
3.원자 급 디 렉 터 리 가 디 렉 터 리 인지 판단
3.1.재 귀적 으로 자신 을 호출 하고 자신의 하위 디 렉 터 리 를 원본 파일 로 삼 아 대상 하위 디 렉 터 리 로 복사 합 니 다.
3.2 깊이 를 옮 겨 다 니 며 원본 디 렉 터 리 와 대상 디 렉 터 리 를 스 택(대기 열)뒤에 추가 합 니 다.'
# ( )
#
import os, collections
def copyDir(sourcePath,targetPath):
# ,
# ,
if not os.path.isdir(sourcePath):
return ' '
# , ,
sourceStack = collections.deque()
sourceStack.append(sourcePath)
targetStack = collections.deque()
targetStack.append(targetPath)
#
while True:
if len(sourceStack) == 0:
break
#
sourcePath = sourceStack.pop() #sourcePath = sourceStack.popleft()
#
listName = os.listdir(sourcePath)
#
targetPath = targetStack.pop() #targetPath = targetStack.popleft()
# ,
if not os.path.isdir(targetPath):
os.makedirs(targetPath)
# , ,
for name in listName:
#
sourceAbs = os.path.join(sourcePath, name)
targetAbs = os.path.join(targetPath, name)
#
if os.path.isdir(sourceAbs):
# ,
if not os.path.exists(targetAbs):
os.makedirs(targetAbs)
#
sourceStack.append(sourceAbs)
targetStack.append(targetAbs)
#
if os.path.isfile(sourceAbs):
# 1.
if (not os.path.exists(targetAbs)) or (os.path.exists(targetAbs) and os.path.getsize(targetAbs) != os.path.getsize(targetAbs)):
rf = open(sourceAbs, mode='rb')
wf = open(targetAbs, mode='wb')
while True:
# ,
content = rf.read(1024*1024*10)
if len(content) == 0:
break
wf.write(content)
# ,
wf.flush()
#
rf.close()
wf.close()
#
sPath = ""
tPath = ""
copyDir(sPath,tPath)
반복:귀속 사고:
1.함 수 를 정의 하여 디 렉 터 리 를 복사 하려 면 원본 디 렉 터 리 와 대상 디 렉 터 리 로 전송 해 야 합 니 다.
2.원본 디 렉 터 리 가 하나의 디 렉 터 리 인지 아 닌 지 판단-아니면 종료
3.대상 디 렉 터 리 의 존재 여부-존재 하지 않 음,새로 만 들 기
4.원본 디 렉 터 리 를 옮 겨 다 니 며,
import os
def copyDir(sourceDir,targetDir):
if not os.path.isdir(sourceDir):
return " "
if not os.path.exists(targetDir):
os.makedirs(targetDir)
listName = os.listdir(sourceDir)
for name in listName:
sourceAbs = os.path.join(sourceDir,name)
targetAbs = os.path.join(targetDir,name)
if os.path.isdir(sourceAbs):
#
if not os.path.exists(targetAbs):
os.makedirs(targetAbs)
copyDir(sourceAbs,targetAbs)
if os.path.isfile(sourceAbs):
# 1.
if (not os.path.exists(targetAbs)) or (os.path.exists(targetAbs) and os.path.getsize(targetAbs) != os.path.getsize(sourceAbs)):
rf = open(sourceAbs,mode="rb")
wf = open(targetAbs,mode="wb")
while True:
content = rf.read(1024*1024*10)
if len(content) == 0:
break
wf.write(content)
wf.flush()
rf.close()
wf.close()
#
sPath = ""
tPath = ""
copyDir(sPath,tPath)
이상 의 python 이 디 렉 터 리 복 제 를 실현 하 는 세 가지 소결 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.