os.listdir, 모든 경우 보존 파일 시스템에서 : 그러나만큼 당신이 어떤 합리적인 규칙을 (모든 파일 이름 예를 들어, 소문자입니다) 가지고, 기존의 파일을 확인하기 위해 사소한 것 (Windows의 경우 포함), 나열한 디렉토리의 파일 이름에 대한 실제 대소 문자를 반환합니다.
그래서 당신은 경로의 각 레벨에서이 검사를 할 필요가 : 나는 이름의 경우 변화의 완전한 부재가 오류의 다른 종류라고 가정하고, 사용하고
def onelevelok(parent, thislevel):
for fn in os.listdir(parent):
if fn.lower() == thislevel.lower():
return fn == thislevel
raise ValueError('No %r in dir %r!' % (
thislevel, parent))
그 예외; foo/bar
가 아닌 foo
을 의미주의해야 할, 당신은 예를 들어, 경우이 적응해야 할 수도 있습니다
def allpathok(path):
levels = os.path.split(path)
if os.path.isabs(path):
top = ['/']
else:
top = ['.']
return all(onelevelok(p, t)
for p, t in zip(top+levels, levels))
:와, 전체 경로 (어쨌든 Windows로 번역하지 않을에는 드라이브 문자 또는 UNC 없다고 가정) 현재 디렉토리에 있지만 다른 위치에 있습니다. 물론, UNC 나 드라이브 편지가 실제로 필요하다면 (하지만 필자가 리눅스로 번역 한 내용은 어쨌든 사소한 것이 아닙니다 .-)).
구현 참고 사항 : zip
은 지퍼 링 시퀀스의 가장 짧은 길이를 초과하여 "추가 항목"을 드롭한다는 점을 이용합니다. 그래서 나는 명시 적으로 첫 번째 인자 인 levels
에서 "leaf"(마지막 엔트리)를 잘라 낼 필요가 없다. zip
은 나를 대신한다. all
은 가능한 한 단락 회로를 구성하여 거짓 값을 감지하자마자 False
을 반환하므로 명시 적 루프만큼 좋지만 빠르고 정확합니다.
이렇게 실수로 끝나는 방법이 명확하지 않습니다. 이 값들을 하드 코딩하고 있습니까? – SilentGhost