Bagaimana cara menghitung jumlah file dalam sebuah direktori menggunakan Python

Saya perlu untuk menghitung jumlah file dalam direktori dengan menggunakan Python.

Saya kira cara yang paling mudah adalah len(glob.glob('*')), tapi yang juga penting direktori itu sendiri sebagai sebuah file.

Apakah ada cara untuk menghitung hanya files di direktori?

Mengomentari pertanyaan (1)
Larutan

os.listdir() akan sedikit lebih efisien daripada menggunakan glob.glob. Untuk menguji apakah nama file adalah sebuah file biasa (bukan sebuah direktori atau entitas lain), gunakan os.jalan.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))])
Komentar (7)
import os

path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)
Komentar (3)

Untuk semua jenis file, termasuk subdirektori:

import os

list = os.listdir(dir) # dir is your directory path
number_files = len(list)
print number_files

Hanya file (menghindari subdirektori):

import os

onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string
print len(onlyfiles)
Komentar (1)

Ini adalah di mana fnmatch datang sangat berguna:

import fnmatch

print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))

Rincian lebih lanjut: http://docs.python.org/2/library/fnmatch.html

Komentar (1)
import os
print len(os.listdir(os.getcwd()))
Komentar (1)
def directory(path,extension):
  list_dir = []
  list_dir = os.listdir(path)
  count = 0
  for file in list_dir:
    if file.endswith(extension): # eg: '.txt'
      count += 1
  return count
Komentar (0)

Saya terkejut bahwa tidak ada disebutkan os.scandir:

def count_files(dir):
    return len([1 for x in list(os.scandir(dir)) if x.is_file()])
Komentar (1)

Ini menggunakan os.listdir dan bekerja untuk setiap direktori:

import os
directory = 'mydirpath'

number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])

ini dapat disederhanakan dengan generator dan dibuat sedikit lebih cepat dengan:

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)))
Komentar (0)

Jika anda ingin menghitung semua file dalam direktori termasuk file dalam subdirektori, yang paling pythonic adalah:

import os

file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)

Kami menggunakan jumlah yang lebih cepat daripada secara eksplisit menambahkan jumlah file (timing yang tertunda)

Komentar (2)
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

Dikeluarkan dari post ini

Komentar (1)

Berikut ini adalah sederhana satu baris perintah yang saya temukan berguna:

print int(os.popen("ls | wc -l").read())
Komentar (0)
import os

def count_files(in_directory):
    joiner= (in_directory + os.path.sep).__add__
    return sum(
        os.path.isfile(filename)
        for filename
        in map(joiner, os.listdir(in_directory))
    )

>>> count_files("/usr/lib")
1797
>>> len(os.listdir("/usr/lib"))
2049
Komentar (0)

Luke's kode memformat ulang.

import os

print len(os.walk('/usr/lib').next()[2])
Komentar (1)

Sementara saya setuju dengan jawaban yang diberikan oleh @DanielStutzbach: os.listdir() akan sedikit lebih efisien daripada menggunakan glob.glob.

Namun, ekstra presisi, jika anda ingin menghitung jumlah file dalam folder, anda ingin menggunakan len(glob.glob()). Misalnya jika anda menghitung semua file pdf di folder yang ingin anda gunakan:

pdfCounter = len(glob.glob1(myPath,"*.pdf"))
Komentar (0)

import os

total_con=os.listdir('
Komentar (1)

Jika anda'akan menggunakan shell standar dari sistem operasi, anda bisa mendapatkan hasil jauh lebih cepat daripada menggunakan murni pythonic cara.

Contoh untuk 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))
Komentar (1)

Saya menemukan jawaban lain yang mungkin benar sebagai jawaban yang diterima.

for root, dirs, files in os.walk(input_path):    
for name in files:
    if os.path.splitext(name)[1] == '.TXT' or os.path.splitext(name)[1] == '.txt':
        datafiles.append(os.path.join(root,name)) 

print len(files) 
Komentar (0)

Hal ini sederhana:

print(len([iq for iq in os.scandir('PATH')]))

itu hanya menghitung jumlah file dalam direktori , saya telah menggunakan daftar pemahaman teknik untuk iterate melalui direktori tertentu kembali semua file kembali . "len(kembali daftar)" kembali jumlah file.

Komentar (2)

Saya menggunakan glob.iglob untuk struktur direktori yang sama untuk

data
└───train
│   └───subfolder1
│   |   │   file111.png
│   |   │   file112.png
│   |   │   ...
│   |
│   └───subfolder2
│       │   file121.png
│       │   file122.png
│       │   ...
└───test
    │   file221.png
    │   file222.png

Kedua opsi-opsi berikut kembali 4 (seperti yang diharapkan, yaitu tidak menghitung subfolder sendiri)

  • len(list(glob.iglob("data/train/*/*.png", rekursif=True)))
  • sum(1 untuk saya di glob.iglob("data/train/*/*.png"))
Komentar (0)

saya melakukan ini dan ini kembali jumlah file dalam folder(Attack_Data)...ini bekerja dengan baik.

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))
Komentar (1)