재귀 코드를 사용하여 2 개의 값 (총 파일, 폴더)을 반환하고 싶습니다.

아담 치즈

나는 os.walk (), glob 또는 fnmatch를 사용하지 않는이 프로그램을 작성했으며 이는 의도적 인 것입니다. 디렉터리와 지정된 디렉터리의 모든 하위 디렉터리와 파일을 살펴보고 거기에있는 파일 + 폴더 수를 반환합니다.

import os

def fcount(path):
    count = 0

    '''Folders'''
    for f in os.listdir(path):
        file = os.path.join(path, f)
        if os.path.isdir(file):
            file_count = fcount(file)
            count += file_count + 1

    '''Files'''
    for f in os.listdir(path):
        if os.path.isfile(os.path.join(path, f)):
            count += 1
    return count

path = 'F:\\'
print(fcount(path))

내가 얻은 예제 출력 700은 총 700 개의 파일과 폴더에 대한 디렉토리 F가 제공했습니다 .

지금 제가하고 싶은 것은이 코드를 사용 fcount('F:\\')하여 set 을 호출 하고 반환하는 것입니다 (total files, folders).

내가 원하는 출력의 예는 다음과 같습니다 (700, 50). 700것입니다 files + folders과는 50단지입니다 folders.

이 작업을 수행하는 방법을 잘 모르겠습니다.

Martijn Pieters

두 카운트를 유지하고 튜플로 반환합니다.

total_count = dir_count = 0, 0
# .. increment either as needed
return total_count, dir_count

os.listdir() 한 번만 반복 하면됩니다 . 무언가가 파일인지 디렉토리인지 이미 감지 했으므로 하나의 루프에서 구별하십시오.

def fcount(path):
    total_count = dir_count = 0

    for f in os.listdir(path):
        file = os.path.join(path, f)
        if os.path.isdir(file):
            recursive_total_count, recursive_dir_count = fcount(file)
            # count this directory in the total and the directory count too
            total_count += 1 + recursive_total_count
            dir_count += 1 + recursive_dir_count
        elif if os.path.isfile(file):
            total_count += 1
    return file_count, total_count

path = 'F:\\'
print(fcount(path))

마지막 print()은 카운트와 함께 튜플을 인쇄합니다. 언제든지 분할 할 수 있습니다.

total_count, dir_count = fcount(path)
print('Total:', total_count)
print('Directories:', dir_count)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PHP에서 재귀 함수를 사용하여 배열의 값을 증가시키고 배열에서 총 값을 반환하는 방법

분류에서Dev

배치 파일을 사용하여 "새 폴더"를 만들고 싶습니다.

분류에서Dev

해당 함수를 다시 실행하지 않고 다른 함수에서 함수의 반환 값을 사용하고 싶습니다. (파이썬)

분류에서Dev

텍스트 파일 폴더 구조 데이터를 읽고 c # .net을 사용하여 루트 노드 값의 합계를 찾습니다.

분류에서Dev

파일 이름을 사용하여 파일 한 폴더를 Google 드라이브의 다른 폴더로 복사

분류에서Dev

c ++ 더하기를 사용하여 2 개의 정수를 재귀 적으로 곱합니다.

분류에서Dev

SQL에서 재귀를 사용하여 새 열을 반환하고 싶습니까?

분류에서Dev

주입을 사용하여 첫 번째 값만 반환하고 총계를 원합니다.

분류에서Dev

PowerShell을 사용하여 스크립트 데이터를 2 개의 텍스트 파일로 동시에 내보내고 싶습니다.

분류에서Dev

Mac OS X에서 명령 줄 "zip"도구를 사용하여 디렉토리 및 하위 디렉토리의 파일을 재귀 적으로 압축하고 모든 하위 폴더에서 .DS_Store 파일을 제외합니다.

분류에서Dev

bash-2 개의 공통 열을 사용하여 2 개의 파일을 병합하고 세 번째 열의 값을 더합니다.

분류에서Dev

EXE 파일을 실행하고 VC ++를 사용하여 반환 값을받습니다.

분류에서Dev

재귀를 사용하여 목록의 총 요소 수 계산

분류에서Dev

carry를 사용하여 재귀 적으로 2 개의 정수 더하기

분류에서Dev

zmv를 사용하여 여러 파일의 이름을 재귀 적으로 변경해야합니다.

분류에서Dev

파이썬 df의 총 수가 아닌 순서로 값이 동일한 "실행"의 길이를 계산하고 싶습니다.

분류에서Dev

bstNode *를 bstNode **로 변환 할 수 없다는 코드 오류. 여기서는 재귀와 함께 이중 포인터 개념을 사용하고 있습니다.

분류에서Dev

XSLT를 사용하여 속성 값을 기반으로 2 개의 XML 파일 (노드 속성 포함) 병합

분류에서Dev

재귀를 사용하여 파이썬에서 값 주변의 사전을 반전

분류에서Dev

PHP를 사용하여 DICOM 파일을 업로드하고 싶습니다.

분류에서Dev

배치 파일을 사용하여 2 개의 특정 폴더 내의 모든 콘텐츠를 삭제하려면 어떻게합니까?

분류에서Dev

fread를 사용하여 폴더의 모든 파일을 다운로드 할 수 있습니까?

분류에서Dev

패턴이있는 폴더를 재귀 적으로 검색하고 그 안에 파일을 가져옵니다.

분류에서Dev

metaflac를 사용하여 flac 태그에서 .flac 파일의 이름을 재귀 적으로 변경합니다.

분류에서Dev

파일 이름으로 2 개의 폴더를 비교하고 zsh를 사용하여 파일 이름의 시작 부분 만 어떻게 비교합니까?

분류에서Dev

재귀를 사용하여 트리에서 적절하게 값을 반환합니다.

분류에서Dev

텍스트 파일의 파일 목록을 사용하여 파일 한 폴더를 Google 드라이브의 다른 폴더로 복사

분류에서Dev

2 개의 필드를 선택하고 고유 한 값으로 정렬 된 배열을 반환합니다.

분류에서Dev

폴더 아래의 매개 변수 재귀 값을 변경하는 방법

Related 관련 기사

  1. 1

    PHP에서 재귀 함수를 사용하여 배열의 값을 증가시키고 배열에서 총 값을 반환하는 방법

  2. 2

    배치 파일을 사용하여 "새 폴더"를 만들고 싶습니다.

  3. 3

    해당 함수를 다시 실행하지 않고 다른 함수에서 함수의 반환 값을 사용하고 싶습니다. (파이썬)

  4. 4

    텍스트 파일 폴더 구조 데이터를 읽고 c # .net을 사용하여 루트 노드 값의 합계를 찾습니다.

  5. 5

    파일 이름을 사용하여 파일 한 폴더를 Google 드라이브의 다른 폴더로 복사

  6. 6

    c ++ 더하기를 사용하여 2 개의 정수를 재귀 적으로 곱합니다.

  7. 7

    SQL에서 재귀를 사용하여 새 열을 반환하고 싶습니까?

  8. 8

    주입을 사용하여 첫 번째 값만 반환하고 총계를 원합니다.

  9. 9

    PowerShell을 사용하여 스크립트 데이터를 2 개의 텍스트 파일로 동시에 내보내고 싶습니다.

  10. 10

    Mac OS X에서 명령 줄 "zip"도구를 사용하여 디렉토리 및 하위 디렉토리의 파일을 재귀 적으로 압축하고 모든 하위 폴더에서 .DS_Store 파일을 제외합니다.

  11. 11

    bash-2 개의 공통 열을 사용하여 2 개의 파일을 병합하고 세 번째 열의 값을 더합니다.

  12. 12

    EXE 파일을 실행하고 VC ++를 사용하여 반환 값을받습니다.

  13. 13

    재귀를 사용하여 목록의 총 요소 수 계산

  14. 14

    carry를 사용하여 재귀 적으로 2 개의 정수 더하기

  15. 15

    zmv를 사용하여 여러 파일의 이름을 재귀 적으로 변경해야합니다.

  16. 16

    파이썬 df의 총 수가 아닌 순서로 값이 동일한 "실행"의 길이를 계산하고 싶습니다.

  17. 17

    bstNode *를 bstNode **로 변환 할 수 없다는 코드 오류. 여기서는 재귀와 함께 이중 포인터 개념을 사용하고 있습니다.

  18. 18

    XSLT를 사용하여 속성 값을 기반으로 2 개의 XML 파일 (노드 속성 포함) 병합

  19. 19

    재귀를 사용하여 파이썬에서 값 주변의 사전을 반전

  20. 20

    PHP를 사용하여 DICOM 파일을 업로드하고 싶습니다.

  21. 21

    배치 파일을 사용하여 2 개의 특정 폴더 내의 모든 콘텐츠를 삭제하려면 어떻게합니까?

  22. 22

    fread를 사용하여 폴더의 모든 파일을 다운로드 할 수 있습니까?

  23. 23

    패턴이있는 폴더를 재귀 적으로 검색하고 그 안에 파일을 가져옵니다.

  24. 24

    metaflac를 사용하여 flac 태그에서 .flac 파일의 이름을 재귀 적으로 변경합니다.

  25. 25

    파일 이름으로 2 개의 폴더를 비교하고 zsh를 사용하여 파일 이름의 시작 부분 만 어떻게 비교합니까?

  26. 26

    재귀를 사용하여 트리에서 적절하게 값을 반환합니다.

  27. 27

    텍스트 파일의 파일 목록을 사용하여 파일 한 폴더를 Google 드라이브의 다른 폴더로 복사

  28. 28

    2 개의 필드를 선택하고 고유 한 값으로 정렬 된 배열을 반환합니다.

  29. 29

    폴더 아래의 매개 변수 재귀 값을 변경하는 방법

뜨겁다태그

보관