Come faccio a leggere il numero di file in una cartella specifica usando Python? Il codice di esempio sarebbe fantastico!Come faccio a leggere il numero di file in una cartella usando Python?
risposta
Per contare file e directory in modo non ricorsivo è possibile utilizzare os.listdir
e prendere la sua lunghezza.
Per contare i file e le directory in modo ricorsivo è possibile utilizzare os.walk
per scorrere i file e le sottodirectory nella directory.
Se si desidera solo per contare i file non directory è possibile utilizzare os.listdir
e os.path.file
per controllare se ogni voce è un file:
import os.path
path = '.'
num_files = len([f for f in os.listdir(path)
if os.path.isfile(os.path.join(path, f))])
Oppure, in alternativa utilizzando un generatore:
num_files = sum(os.path.isfile(os.path.join(path, f)) for f in os.listdir(path))
Oppure si possibile utilizzare os.walk
come segue:
len(os.walk(path).next()[2])
Ho trovato alcune di queste idee da this thread.
È possibile utilizzare il modulo glob:
>>> import glob
>>> print len(glob.glob('/tmp/*'))
10
Oppure, come suggerisce Mark Byers nella sua risposta, se desideri solo file:
>>> print [f for f in glob.glob('/tmp/*') if os.path.isfile(f)]
['/tmp/foo']
>>> print sum(os.path.isfile(f) for f in glob.glob('/tmp/*'))
1
risposta di Marco Byer è semplice, elegante, e va d'accordo con lo spirito pitone.
C'è un problema, però: "". Se si tenta di eseguire che per ogni altra directory che, fallirà, in quanto os.listdir() restituisce i nomi dei file, non il percorso completo. Questi due sono gli stessi quando si elenca la directory di lavoro corrente, quindi l'errore non viene rilevato nella sorgente sopra.
Ad esempio, se in "/ home/me" e si elenca "/ tmp", si otterrà (diciamo) ['flashXVA67']. Proverai "/ home/me/flashXVA67" invece di "/ tmp/flashXVA67" con il metodo sopra.
È possibile risolvere questo usando os.path.join(), in questo modo:
import os.path
path = './whatever'
count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))])
Inoltre, se avete intenzione di fare questo conteggio molto e richiedono le prestazioni, si consiglia di fare senza generare elenchi aggiuntivi. Ecco un meno elegante, ma efficace soluzione unpythonesque:
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
# The following line prints the number of files in the current directory:
path = "./whatever"
print fcount(path)
dai un'occhiata alla risposta di bstpierre. – SilentGhost
Davvero! Sembra migliore del mio, e se stai leggendo questo, controlla la prima risposta, l'aggiunta è stata fatta da Mark usando walk() che risolve entrambi i problemi che ho evidenziato in una singola riga. – slezica
+1 per individuare il bug - Ho aggiornato la mia risposta con la versione corretta. –
total = len(filter(
lambda f: os.path.isfile(os.path.join(path_to_dir, f)),
os.listdir(path_to_dir)))
O
total = sum([True for f in os.listdir(path_to_dir) if os.path.isfile(os.path.join([path_to_dir, f)])
pathlib
, che è nuovo in v 3.4, rende più facile come.. La riga con etichetta crea un elenco non ricorsivo della cartella corrente, quella denominata l'elenco ricorsivo.
from pathlib import Path
import os
os.chdir('c:/utilities')
print (len(list(Path('.').glob('*')))) ## 1
print (len(list(Path('.').glob('**/*')))) ## 2
Ci sono anche altre prelibatezze.Con queste righe aggiuntive è possibile visualizzare sia i nomi di file assoluti e relativi per quegli elementi che sono file.
for item in Path('.').glob('*'):
if item.is_file():
print (str(item), str(item.absolute()))
Risultato:
boxee.py c:\utilities\boxee.py
boxee_user_catalog.sqlite c:\utilities\boxee_user_catalog.sqlite
find RSS.py c:\utilities\find RSS.py
MyVideos34.sqlite c:\utilities\MyVideos34.sqlite
newsletter-1 c:\utilities\newsletter-1
notes.txt c:\utilities\notes.txt
README c:\utilities\README
saveHighlighted.ahk c:\utilities\saveHighlighted.ahk
saveHighlighted.ahk.bak c:\utilities\saveHighlighted.ahk.bak
temp.htm c:\utilities\temp.htm
to_csv.py c:\utilities\to_csv.py
- 1. Come faccio a leggere/scrivere file binari?
- 2. Come faccio a scorrere tutti i file in una cartella usando C?
- 3. Contare il numero di file in una cartella tramite javascript
- 4. Come verificare se una cartella contiene file usando python 3
- 5. Come faccio a tracciare il movimento usando OpenCV in Python?
- 6. Leggere un file CSV usando Python 3
- 7. Come faccio a contrassegnare un elemento come leggere con lettore di API di Google (usando python)
- 8. Come faccio a comprimere una directory di file usando C++?
- 9. Come faccio a leggere il file manifest per una webapp in esecuzione in apache tomcat?
- 10. Come faccio a leggere i contenuti FILE in QML?
- 11. Come leggere il file Avro in PySpark
- 12. Come leggere solo le righe in un file di testo dopo una determinata stringa usando python?
- 13. Utilizzando Python, come faccio a leggere/scrivere i dati in memoria come farei con un file?
- 14. Leggere il file XML utilizzando Javascript da una cartella locale
- 15. VB - Come faccio a leggere e scrivere un file binario?
- 16. Come passare a una cartella di nuovo in python
- 17. Come faccio a far corrispondere coordinate simili usando Python?
- 18. Come conoscere il numero di fogli in una cartella di lavoro?
- 19. Come faccio a leggere e inode traslazione
- 20. Utilizzando os.path di Python, come faccio a risalire una directory?
- 21. Usa il file tar.gz come una cartella?
- 22. Come ottenere il numero di file in una cartella come variabile?
- 23. Come faccio a leggere/scrivere file compressi con gzip?
- 24. C# - Come faccio a leggere e scrivere un file binario?
- 25. Java - Leggere molti txt file in una cartella e elaborarli
- 26. xlrd leggere il numero come stringa
- 27. Come faccio ad includere un file jar in una cartella lib di un file ear usando formica?
- 28. In Python, come faccio a voxelize una mesh 3D
- 29. Come leggere il numero di righe in UITextView
- 30. Come posso leggere un file immagine usando Python?
Va detto, che 'os.listdir ('. ')' Include i file nascosti (a partire da un singolo punto), mentre 'glob (' ./* ') 'non lo fa. – lunaryorn
@lunaryorn - Se vuoi i file nascosti nella directory corrente, usa 'glob ('. *')'. Se vuoi tutto compreso i file nascosti, usa 'glob ('. *') + Glob ('*')'. – bstpierre