Liệt kê tất cả các tệp png trong một thư mục python

Đây là tập lệnh đầy đủ để tải tất cả các PNG trong một thư mục nhất định, chuyển đổi chúng thành TIFF thang độ xám 8 bit, sau đó lưu chúng vào một thư mục khác.
import os
from skimage import io
from skimage.util import img_as_ubyte

# You need to change these to valid directories on your computer
input_dir = os.path.dirname['C:/FILES/leaves/']
output_dir = os.path.dirname['C:/FILES/leaves converted/']

for f in os.listdir[input_dir]:
    if f.lower[].endswith['.png'] is True:
        image_gray = io.imread[os.path.join[input_dir, f],
                               as_gray=True]
        image_gray = img_as_ubyte[image_gray]
        output_file = f.replace['.png', '_gray.tiff']
        io.imsave[os.path.join[output_dir, output_file], image_gray]

Bạn cũng có thể truy cập tập lệnh này trên GitHub của chúng tôi


từng dòng

Hãy nhập chức năng chúng ta sẽ cần

import os
from skimage import io
from skimage.util import img_as_ubyte

Hãy đặt đường dẫn đến thư mục tệp đầu vào và đầu ra mà chúng tôi đang sử dụng làm biến để dễ dàng truy cập. Các tệp đầu vào của tôi nằm trong một thư mục tại C. /FILES/leaves/ và tôi có một thư mục trống tại C. /FILES/lá đã chuyển đổi/ cho đầu ra. Mô hình con giúp đảm bảo rằng mã hoạt động với các đường dẫn sẽ hoạt động trên các hệ điều hành khác nhau, trong đó các ký tự khác nhau có thể được sử dụng để phân tách các bộ mô tả đường dẫn. Ở đây chúng tôi sử dụng để thiết lập các thư mục đầu vào và đầu ra dưới dạng biến

# You need to change these to valid directories on your computer
input_dir = os.path.dirname['C:/FILES/leaves/']
output_dir = os.path.dirname['C:/FILES/leaves converted/']

Chúng tôi cần lặp qua tất cả các tệp trong thư mục đầu vào để thực hiện thao tác của mình. Mô-đun os có một hàm tiện lợi, trả về danh sách tất cả các tệp và thư mục con trong thư mục đã cho. Hãy làm điều này ngay bây giờ và gọi tất cả các phần tử trong danh sách đó là f

for f in os.listdir[input_dir]:

Trong trường hợp của tôi, tôi muốn giới hạn thực hiện thao tác này chỉ trên các PNG trong thư mục đầu vào của mình. Hàm if này giới hạn mã nào được thực thi chỉ với các tệp PNG

    if f.lower[].endswith['.png'] is True:

Hai phương thức chuỗi được sử dụng trên mỗi tên tệp f thực hiện như sau

  • Lower chuyển đổi f thành tất cả các ký tự chữ thường để chúng tôi không phải kiểm tra rõ ràng cả "PNG" và "png"

  • kết thúc bằng việc tìm kiếm một chuỗi con [e. g. ". png"] ở cuối chuỗi

Tiếp theo, chúng tôi mở từng hình ảnh PNG trong thư mục bằng cách sử dụng imread của scikit-image với tham số as_gray được đặt thành True, sau đó đảm bảo mảng được trả về được chia tỷ lệ và chuyển đổi thành 8 bit bằng cách sử dụng img_as_ubyte từ cùng một gói. Điều này đã được trình bày trong Python Quick Tip 1

        image_gray = io.imread[os.path.join[input_dir, f],
                               as_gray=True]
        image_gray = img_as_ubyte[image_gray]

Điểm mới ở đây là chức năng từ hệ điều hành. mô hình con đường dẫn. Chúng tôi cung cấp đường dẫn đến một thư mục và tên tệp làm đối số để nối và nó sẽ nối chúng một cách “thông minh”

Tiếp theo là một thủ thuật tôi luôn sử dụng khi thực hiện chuyển đổi tệp. Trước khi lưu, hãy tạo tên tệp đầu ra phụ thuộc vào tên tệp đầu vào. Phương thức thay thế sẽ chèn một chuỗi con mới vào vị trí của chuỗi con mà bạn cung cấp. Vì mã này chỉ hoạt động trên PNG, nên chúng tôi chỉ cần thay thế tiện ích mở rộng đó bằng một bộ mô tả, cộng với tiện ích mở rộng mà chúng tôi muốn lưu vào

        output_file = f.replace['.png', '_gray.tiff']

Cuối cùng, chúng tôi lưu hình ảnh đã chuyển đổi dưới dạng TIFF trong thư mục đầu ra của mình, sử dụng os. đường dẫn. tham gia giống như chúng tôi đã làm để mở hình ảnh gốc

        io.imsave[os.path.join[output_dir, output_file], image_gray]

Hãy thử điều chỉnh mã này để chạy cho hình ảnh của riêng bạn và cho chúng tôi biết nó hoạt động như thế nào trên Diễn đàn Aivia


Suy nghĩ bổ sung

Tất nhiên, chức năng listdir không phải là cách duy nhất để lấy danh sách tệp. Ví dụ, hệ điều hành. walk hiệu quả hơn nhiều khi tìm kiếm thông qua các thư mục con, mặc dù bạn có thể thấy việc giải nén những gì nó trả về hơi khó hiểu hơn listdir. Xem thêm tại đây


Điều gì sẽ xảy ra nếu bạn cần loại trừ một số tệp nhất định khỏi tìm kiếm của mình tùy thuộc vào nhiều thứ hơn là chỉ phần mở rộng tệp? . Bạn chỉ muốn thực hiện một số tiền xử lý trên hình ảnh 3D. Nếu bạn chỉ sử dụng TIFF, thư mục của bạn có thể trông như thế này

________số 8_______

Xử lý trước hỗn hợp các tệp 3D và 2D này bằng cùng một thuật toán không thực sự có ý nghĩa. Bạn có thể thêm một số logic kiểm tra hình dạng của từng mảng sau khi nó tải và bỏ qua hình ảnh 2D, nhưng điều này có nghĩa là tập lệnh của bạn lãng phí thời gian tải những hình ảnh 2D đó vào bộ nhớ. Đối với hàng trăm [hoặc hàng nghìn] hoạt động đó, đây có thể là một sự lãng phí đáng kể về thời gian xử lý. Sẽ hợp lý hơn nếu chỉ tải các tệp 3D. Nhập toàn cầu. Điều này xây dựng một danh sách các tệp trong một thư mục khớp với một mẫu chuỗi nhất định và thậm chí nó có thể được đệ quy


Việc sử dụng rộng rãi gói os khi xử lý đường dẫn tệp [os. đường dẫn. dirname, hệ điều hành. listdir, hệ điều hành. đường dẫn. tham gia, v.v. ] khiến tôi bối rối khi lần đầu học Python. Sử dụng các chuỗi đơn giản cho những thứ như đường dẫn tệp đầy đủ sẽ đơn giản hơn. Nhưng nếu bây giờ bạn có thói quen xử lý đường dẫn tệp của mình bằng các chức năng này, thì mã của bạn sẽ ít phụ thuộc vào hệ điều hành hơn, dễ chia sẻ hơn với đồng nghiệp và có nhiều khả năng chạy trong tương lai nếu bạn thay đổi môi trường phát triển của mình


Trong bối cảnh của Aivia

Sẽ không hợp lý khi sử dụng thủ thuật này trực tiếp trong ngữ cảnh của Aivia vì Aivia xử lý tệp IO bằng cơ chế riêng của mình để liên kết Python với các kênh và các bước thời gian. Tuy nhiên, chúng tôi có một tập lệnh tiện ích lặp qua một thư mục chứa các tệp DICOM và kết hợp chúng thành một TIFF 3D duy nhất

file_list = [f for f in os.listdir[dicom_directory] if 'dcm' in f.lower[] or 'dicom' in f.lower[]]

Việc hiểu danh sách này là một ví dụ điển hình khi "Pythonic" đi hơi xa. Hãy giải mã nó một chút

  1. hệ điều hành. listdir[dicom_directory] là biểu thức và trả về danh sách tất cả các tệp và thư mục bên trong thư mục đã cho

  2. f for f in là vòng lặp gán từng mục từ danh sách trả về cho biến f

  3. nếu 'dcm' trong f. Lower[] là một điều kiện chạy cho mỗi lần lặp của vòng lặp và chỉ cho phép các mục được gán cho biến nếu điều đó đúng

  4. nếu 'dicom' trong f. Lower[] là một điều kiện khác chạy cho mỗi lần lặp của vòng lặp và chỉ cho phép các mục được gán cho biến nếu điều đó đúng

  5. hoặc là một Boolean kết hợp hai biểu thức của chúng ta và chỉ trả về true nếu cả hai điều kiện đều đúng cho cùng một vòng lặp

    Làm cách nào để liệt kê tất cả các tệp trong một thư mục có phần mở rộng nhất định trong Python?

    Phương pháp os. listdir[] liệt kê tất cả các tệp có trong một thư mục. Chúng ta có thể sử dụng os. walk[] nếu chúng ta cũng muốn làm việc với các thư mục con.

    Làm cách nào để đọc hình ảnh từ thư mục trong Python?

    Phương pháp 4. Thư viện Matplotlib .
    #Chúng tôi phải nhập các gói hình ảnh và pyplot
    nhập matplotlib. pyplot dưới dạng plt
    nhập matplotlib. hình ảnh như mpimg
    # Đọc hình ảnh chúng ta phải hiển thị. .
    #đường dẫn đầy đủ nếu ảnh không cùng thư mục
    như. tập tin py
    img = mpimg. .
    #hàm này imshow hiển thị dữ liệu dưới dạng hình ảnh

    Làm cách nào để kiểm tra loại tệp trong thư mục Python?

    Trăn. Kiểm tra xem đường dẫn tệp là tệp hay thư mục .
    Giải pháp mẫu. -
    Mã Python. nhập đường dẫn hệ điều hành = "abc. txt" nếu hệ điều hành. đường dẫn. isdir[đường dẫn]. print["\nĐây là một thư mục"] elif os. đường dẫn. isfile[đường dẫn]. print["\nĐây là một tập tin bình thường"] other. print["Đây là một file đặc biệt [socket, FIFO, device file]" ] print[].
    Sơ đồ

    Lệnh nào hiển thị danh sách các tệp và thư mục Python?

    Liệt kê thư mục và tệp trong Python. Tất cả các tệp và thư mục con bên trong một thư mục có thể được truy xuất bằng phương thức listdir[] . Phương thức này nhận vào một đường dẫn và trả về danh sách các thư mục con và tệp trong đường dẫn đó.

Chủ Đề