Làm cách nào để sắp xếp tệp theo tên tệp?

Trong bài viết này, chúng ta sẽ thảo luận về các cách khác nhau để lấy danh sách tất cả các tệp trong một thư mục/thư mục được sắp xếp theo tên trong python

Mục lục

  • Nhận danh sách các tệp [đường dẫn tệp] trong thư mục được sắp xếp theo tên
  • Nhận danh sách tên tệp trong thư mục được sắp xếp theo tên
  • Nhận danh sách các tệp [đường dẫn tệp] trong thư mục và thư mục con được sắp xếp theo tên

Nhận danh sách các tệp trong thư mục được sắp xếp theo tên bằng glob[]

Trong python, mô-đun glob cung cấp một hàm glob[] để tìm các tệp trong một thư mục dựa trên mẫu phù hợp. Tương tự như các quy tắc mở rộng đường dẫn unix, chúng ta có thể sử dụng các ký tự đại diện và biểu thức chính quy để khớp và tìm một vài hoặc tất cả các tệp trong một thư mục. Chúng tôi sẽ sử dụng điều này để lấy danh sách tất cả các tệp trong một thư mục và sau đó sắp xếp danh sách các tệp đó theo tên. Các bước như sau,

  1. Nhận danh sách tất cả các tệp hoặc thư mục trong một thư mục nhất định bằng glob[]
  2. Sử dụng hàm filter[] và os. đường dẫn. isfileIO[], chỉ chọn các tệp từ danh sách
  3. Sắp xếp danh sách các tệp theo tên bằng hàm sorted[]

Ví dụ hoàn chỉnh để lấy danh sách tất cả các tệp trong thư mục được sắp xếp theo tên như sau,

import glob
import os

dir_name = 'C:/Program Files/Java/jdk1.8.0_191/include/'

# Get list of all files in a given directory sorted by name
list_of_files = sorted[ filter[ os.path.isfile,
                        glob.glob[dir_name + '*'] ] ]


# Iterate over sorted list of files and print the file paths 
# one by one.
for file_path in list_of_files:
    print[file_path] 

đầu ra

C:/Program Files/Java/jdk1.8.0_191/include\classfile_constants.h
C:/Program Files/Java/jdk1.8.0_191/include\jawt.h
C:/Program Files/Java/jdk1.8.0_191/include\jdwpTransport.h
C:/Program Files/Java/jdk1.8.0_191/include\jni.h
C:/Program Files/Java/jdk1.8.0_191/include\jvmti.h
C:/Program Files/Java/jdk1.8.0_191/include\jvmticmlr.h

Trong giải pháp này, chúng tôi đã tạo một danh sách các tệp trong một thư mục bằng cách sử dụng hàm Globe[]. Sau đó, chuyển danh sách tới hàm filter[] để chỉ chọn các tệp từ danh sách và bỏ qua từ điển, v.v. Đối với điều này, chúng tôi đã thông qua hệ điều hành. đường dẫn. hàm isfile[] làm đối số cho hàm filter[]. Sau đó, chúng tôi chuyển danh sách tệp cho hàm sorted[], hàm này trả về danh sách tệp trong thư mục được sắp xếp theo tên

Nhưng danh sách chứa các đường dẫn đầy đủ của các tệp. Nếu chúng ta chỉ muốn tên tệp được sắp xếp theo tên thì sao?

Nhận danh sách các tệp trong thư mục được sắp xếp theo tên bằng os. listdir[]

Trong Python, mô-đun os cung cấp một hàm listdir[dir_path], trả về danh sách tên tệp và thư mục con trong đường dẫn thư mục đã cho. Sau đó, chỉ sử dụng hàm filter[] để tạo danh sách các tệp. Sau đó sắp xếp danh sách tên tệp này dựa trên tên bằng cách sử dụng hàm sorted[]

Ví dụ hoàn chỉnh để lấy danh sách các tệp trong thư mục được sắp xếp theo tên như sau,

import os

dir_name = 'C:/Program Files/Java/jdk1.8.0_191/include/'

# Get list of all files in a given directory sorted by name
list_of_files = sorted[ filter[ lambda x: os.path.isfile[os.path.join[dir_name, x]],
                        os.listdir[dir_name] ] ]



for file_name in list_of_files:
    print[file_name]

đầu ra

classfile_constants.h
jawt.h
jdwpTransport.h
jni.h
jvmti.h
jvmticmlr.h

Trong giải pháp này, chúng tôi đã tạo danh sách tên tệp trong thư mục được sắp xếp theo tên

con trăn. Nhận danh sách các tệp trong thư mục và thư mục con được sắp xếp theo tên

Trong cả hai ví dụ trước, chúng tôi đã tạo một danh sách các tệp trong một thư mục được sắp xếp theo tên. Nhưng nó chỉ bao gồm các tệp trong thư mục nhất định, không phải trong các thư mục lồng nhau. Vì vậy, nếu bạn muốn lấy danh sách tất cả các tệp trong thư mục và thư mục con được sắp xếp theo tên, thì hãy xem ví dụ này,

import glob
import os

dir_name = 'C:/Program Files/Java/jdk1.8.0_191/include/'

# Get list of all files in a given directory & sub-directories sorted by name
list_of_files = sorted[ filter[ os.path.isfile,
                        glob.glob[dir_name + '/**/*', recursive=True] ] ]


# Iterate over sorted list of files and print the file paths 
# one by one.
for file_path in list_of_files:
    print[file_path] 

đầu ra

C:/Program Files/Java/jdk1.8.0_191/include\classfile_constants.h
C:/Program Files/Java/jdk1.8.0_191/include\jawt.h
C:/Program Files/Java/jdk1.8.0_191/include\jdwpTransport.h
C:/Program Files/Java/jdk1.8.0_191/include\jni.h
C:/Program Files/Java/jdk1.8.0_191/include\jvmti.h
C:/Program Files/Java/jdk1.8.0_191/include\jvmticmlr.h
C:/Program Files/Java/jdk1.8.0_191/include\win32\bridge\AccessBridgeCallbacks.h
C:/Program Files/Java/jdk1.8.0_191/include\win32\bridge\AccessBridgeCalls.c
C:/Program Files/Java/jdk1.8.0_191/include\win32\bridge\AccessBridgeCalls.h
C:/Program Files/Java/jdk1.8.0_191/include\win32\bridge\AccessBridgePackages.h
C:/Program Files/Java/jdk1.8.0_191/include\win32\jawt_md.h
C:/Program Files/Java/jdk1.8.0_191/include\win32\jni_md.h

Chúng tôi đã sử dụng hàm glob[] với mẫu ‘/**/*’ và đối số recursive=True. Nó đưa ra một danh sách tất cả các tệp, thư mục con và các tệp trong thư mục con. Sau đó, sử dụng hàm filter[] và os. đường dẫn. isfile[] chúng tôi chỉ lọc các tệp và bỏ qua các thư mục. Sau đó, sử dụng hàm sorted[], sắp xếp các tệp đã lọc này và tạo danh sách các tệp được sắp xếp theo tên

Chủ Đề