Làm cách nào để đọc số lượng tệp trong một thư mục cụ thể bằng Python? Mã ví dụ sẽ tuyệt vời!Làm cách nào để đọc số lượng tệp trong một thư mục bằng Python?
Trả lời
Để đếm các tệp và thư mục không theo đệ quy, bạn có thể sử dụng os.listdir
và mất thời lượng.
Để đếm tập tin và thư mục đệ quy, bạn có thể sử dụng os.walk
để lặp qua các tệp và thư mục con trong thư mục.
Nếu bạn chỉ muốn đếm các file không thư mục bạn có thể sử dụng os.listdir
và os.path.file
để kiểm tra xem mỗi mục là một tập tin:
import os.path
path = '.'
num_files = len([f for f in os.listdir(path)
if os.path.isfile(os.path.join(path, f))])
Hoặc cách khác sử dụng một máy phát điện:
num_files = sum(os.path.isfile(os.path.join(path, f)) for f in os.listdir(path))
Hoặc bạn có thể sử dụng os.walk
như sau:
len(os.walk(path).next()[2])
Tôi đã tìm thấy một số ý tưởng này từ this thread.
Bạn có thể sử dụng glob mô-đun:
>>> import glob
>>> print len(glob.glob('/tmp/*'))
10
Hoặc, như Mark Byers gợi ý trong câu trả lời của mình, nếu bạn chỉ muốn tập tin:
>>> 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
câu trả lời Đánh dấu Byer là đơn giản, thanh lịch, và đi cùng với tinh thần python.
Có sự cố, tuy nhiên: nếu bạn cố gắng chạy thư mục đó cho bất kỳ thư mục nào khác ".", Nó sẽ thất bại, vì os.listdir() trả về tên của tệp chứ không phải đường dẫn đầy đủ. Cả hai đều giống nhau khi liệt kê thư mục làm việc hiện tại, do đó lỗi sẽ không bị phát hiện trong nguồn ở trên.
Ví dụ: nếu bạn ở "/ home/me" và bạn liệt kê "/ tmp", bạn sẽ nhận được (nói) ['flashXVA67']. Bạn sẽ thử nghiệm "/ home/me/flashXVA67" thay vì "/ tmp/flashXVA67" bằng phương pháp ở trên.
Bạn có thể sửa lỗi này bằng os.path.join(), như thế này:
import os.path
path = './whatever'
count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))])
Ngoài ra, nếu bạn đang đi để được làm điều này đếm rất nhiều và yêu cầu thực hiện, bạn có thể muốn làm nó mà không tạo danh sách bổ sung. Dưới đây là một, unpythonesque giải pháp ít thanh lịch nhưng hiệu quả:
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)
xem câu trả lời của bstpierre. – SilentGhost
Thật vậy! Trông tốt hơn của tôi, và nếu bạn đang đọc điều này, hãy kiểm tra lại câu trả lời đầu tiên, một sự bổ sung được Mark thực hiện bằng cách sử dụng walk() để giải quyết cả hai vấn đề tôi đã chỉ ra trong một dòng. – slezica
+1 để phát hiện lỗi - Tôi đã cập nhật câu trả lời của mình với phiên bản đã sửa. –
total = len(filter(
lambda f: os.path.isfile(os.path.join(path_to_dir, f)),
os.listdir(path_to_dir)))
HOẶC
total = sum([True for f in os.listdir(path_to_dir) if os.path.isfile(os.path.join([path_to_dir, f)])
pathlib
, đó là mới trong v 3.4, làm như dễ dàng hơn.. Dòng có gắn nhãn tạo danh sách không đệ quy của thư mục hiện tại, một danh sách có nhãn danh sách đệ quy.
from pathlib import Path
import os
os.chdir('c:/utilities')
print (len(list(Path('.').glob('*')))) ## 1
print (len(list(Path('.').glob('**/*')))) ## 2
Còn nhiều tính năng khác nữa.Với những dòng bổ sung này, bạn có thể thấy cả tên tệp tuyệt đối và tương đối cho các mục đó là tệp.
for item in Path('.').glob('*'):
if item.is_file():
print (str(item), str(item.absolute()))
Kết quả:
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. Kiểm tra số lượng thư Gmail chưa đọc bằng Python
- 2. Làm cách nào để tìm tệp trong mỗi thư mục có số lượng tệp cao nhất?
- 3. Số lượng tệp trong một thư mục bằng cách sử dụng C++
- 4. Đếm số lượng tệp trong một thư mục qua javascript
- 5. Xác định số lượng tệp trong một thư mục
- 6. Làm cách nào để lấy số lượng hàng trong tệp Excel bằng thư viện POI?
- 7. Làm cách nào để đọc từ một tệp trong cùng một thư mục?
- 8. Làm cách nào để nén tệp bằng cấu trúc thư mục phẳng bằng Zipfile bằng Python?
- 9. Tôi làm cách nào để nén một thư mục và gửi email tệp nén bằng Python?
- 10. Làm cách nào để đọc tệp hình ảnh bằng Python?
- 11. Đếm số lượng tệp trong thư mục bằng cách sử dụng C
- 12. Làm thế nào để xác định số lượng tệp trên một ổ đĩa bằng Python?
- 13. tệp zip python, làm cách nào để biết một mục là một thư mục?
- 14. Android Làm thế nào để kiểm tra số lượng tập tin trong một thư mục
- 15. Làm cách nào để tự động mở tệp đầu tiên trong một thư mục bằng C++?
- 16. Cách đọc danh sách tệp từ thư mục bằng PHP?
- 17. Làm thế nào để lặp qua một thư mục với một số lượng lớn các tệp trong PowerShell?
- 18. Làm thế nào để tôi nói một tệp từ thư mục bằng Python?
- 19. Đọc một tệp MIDI bằng Python
- 20. Tôi làm cách nào để có được số lượng trang trong một tệp PDF trong Perl?
- 21. Lặp lại một số lượng lớn các tệp trong một thư mục
- 22. Làm cách nào để liệt kê các tệp trong thư mục bằng bash?
- 23. Làm cách nào tôi có thể truy xuất hiệu quả số lượng tệp trong một thư mục?
- 24. Cách lấy thư mục của tệp argparse bằng Python?
- 25. Làm cách nào để biết có bao nhiêu tệp trong một thư mục?
- 26. Trả lại tổng số tệp trong một thư mục bằng cách sử dụng PHP
- 27. Làm thế nào để di chuyển tất cả các tệp của một thư mục vào nhiều thư mục với một số lượng tệp nhất định?
- 28. đọc một tệp trong python
- 29. Thư mục đệ quy Python đọc
- 30. Đếm số lượng loại tệp cụ thể của một thư mục và thư mục con của nó trong mac
Nên nói rằng 'os.listdir ('. ')' Bao gồm các tập tin ẩn (bắt đầu với một dấu chấm duy nhất), trong khi 'glob (' ./* ') 'thì không. – lunaryorn
@lunaryorn - Nếu bạn muốn các tệp ẩn trong thư mục hiện tại, hãy sử dụng 'glob ('. *')'. Nếu bạn muốn tất cả mọi thứ bao gồm các tập tin ẩn, sử dụng 'glob ('. *') + Glob ('*')'. – bstpierre