답변:
os.listdir()
를 사용하는 것보다 약간 더 효율적 glob.glob
입니다. 파일 이름이 일반 파일인지 (디렉토리 나 다른 엔티티가 아닌) 테스트하려면 os.path.isfile()
다음을 사용하십시오 .
import os, os.path
# simple version for working with CWD
print len([name for name in os.listdir('.') if os.path.isfile(name)])
# path joining version for other paths
DIR = '/tmp'
print len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])
os.path.join(DIR, name)
over 를 사용하면 어떤 이점이 DIR + '/' + name
있습니까? 후자는 더 짧고 IMO는 전자보다 더 명확합니다. 후자가 실패하는 OS가 있습니까?
import os
path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)
모든 종류의 파일에 대해 하위 디렉토리에는 다음이 포함됩니다.
import os
list = os.listdir(dir) # dir is your directory path
number_files = len(list)
print number_files
파일 만 (하위 디렉토리 제외) :
import os
onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string
print len(onlyfiles)
fnmatch가 매우 유용한 곳입니다.
import fnmatch
print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))
os.path.isfile()
허용 된 답변 과 같이 각 파일을 테스트하는 것보다 훨씬 빠릅니다 (1 만 개의 파일이있는 디렉토리에서 테스트 할 때 약 절반의 시간) . 보다 훨씬 빠릅니다 glob.glob()
.
하위 디렉토리의 파일을 포함하여 디렉토리의 모든 파일을 계산하려면 가장 비법적인 방법은 다음과 같습니다.
import os
file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)
파일 수를 명시 적으로 추가하는 것보다 빠른 합계를 사용합니다 (타이밍 보류 중)
_
에서 사용할 수 있다는 것을 알고 있습니다 for
. os.walk
나도 알아 그러나 sum
함수 내부에서 밑줄로 무슨 일이 일어나고 있는지 잘 모르겠다면 정교하게 설명해 주시겠습니까? 감사!
아무도 언급하지 않은 것에 놀랐습니다 os.scandir
.
def count_files(dir):
return len([1 for x in list(os.scandir(dir)) if x.is_file()])
이것은 os.listdir
모든 디렉토리에서 사용 하고 작동합니다.
import os
directory = 'mydirpath'
number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])
이것은 발전기로 단순화 할 수 있으며 다음과 같이 조금 더 빨라졌습니다.
import os
isfile = os.path.isfile
join = os.path.join
directory = 'mydirpath'
number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item)))
def count_em(valid_path):
x = 0
for root, dirs, files in os.walk(valid_path):
for f in files:
x = x+1
print "There are", x, "files in this directory."
return x
이 게시물 에서 가져온
files
목록입니다. 2. OP는 재귀 카운트를 찾지 않습니다
간단하다:
print(len([iq for iq in os.scandir('PATH')]))
그것은 단순히 디렉토리에있는 파일의 수를 계산합니다. 나는 목록 이해 기술을 사용하여 모든 파일을 반환하는 특정 디렉토리를 반복합니다. "len (반환 목록)"은 파일 수를 반환합니다.
운영 체제의 표준 쉘을 사용하는 경우 순수한 pythonic 방식을 사용하는 대신 결과를 훨씬 빠르게 얻을 수 있습니다.
Windows의 예 :
import os
import subprocess
def get_num_files(path):
cmd = 'DIR \"%s\" /A-D /B /S | FIND /C /V ""' % path
return int(subprocess.check_output(cmd, shell=True))
나는 glob.iglob
비슷한 디렉토리 구조를 사용 했다.
data
└───train
│ └───subfolder1
│ | │ file111.png
│ | │ file112.png
│ | │ ...
│ |
│ └───subfolder2
│ │ file121.png
│ │ file122.png
│ │ ...
└───test
│ file221.png
│ file222.png
다음 옵션은 모두 4를 반환합니다 ( 예 : 하위 폴더 자체를 계산하지 않음 ).
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
나는 이것을했고 이것은 폴더 (Attack_Data)의 파일 수를 반환했다. 이것은 잘 작동한다.
import os
def fcount(path):
#Counts the number of files in a directory
count = 0
for f in os.listdir(path):
if os.path.isfile(os.path.join(path, f)):
count += 1
return count
path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder
print (fcount(path))