Làm thế nào để bạn có được một tệp cụ thể trong một thư mục trong python?

Python có thể tìm kiếm tên tệp trong một đường dẫn được chỉ định của HĐH. Điều này có thể được thực hiện bằng cách sử dụng module os với các hàm walk[]. Điều này sẽ lấy một đường dẫn cụ thể làm đầu vào và tạo 3-tuple liên quan đến dirpath, dirnames và filenames

Trong ví dụ dưới đây, chúng tôi đang tìm kiếm một tệp có tên smpl. htm bắt đầu từ thư mục gốc có tên “D. \”. hệ điều hành. walk[] tìm kiếm toàn bộ thư mục và từng thư mục con của nó để định vị tệp này. Kết quả là chúng ta thấy rằng tệp có trong cả thư mục chính và cả trong thư mục con. Chúng tôi đang chạy chương trình này trong hệ điều hành windows

Ví dụ

import os

def find_files[filename, search_path]:
   result = []

# Wlaking top-down from the root
   for root, dir, files in os.walk[search_path]:
      if filename in files:
         result.append[os.path.join[root, filename]]
   return result

print[find_files["smpl.htm","D:"]]

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']

Trong Python, bạn có thể lấy tên tệp [tên cơ sở], tên thư mục [thư mục] và phần mở rộng từ chuỗi đường dẫn hoặc nối các chuỗi để tạo chuỗi đường dẫn với mô-đun

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
3 trong thư viện chuẩn

  • hệ điều hành. đường dẫn — Thao tác tên đường dẫn phổ biến — Python 3. 9. tài liệu 1rc1

Bài viết này mô tả các nội dung sau

  • Sự khác biệt trong dấu phân cách đường dẫn của hệ điều hành
  • Lấy tên tệp [tên cơ sở] từ một đường dẫn.
    basename = os.path.basename[filepath]
    print[basename]
    # filename.ext
    
    print[type[basename]]
    # 
    
    4
    • Tên tệp có phần mở rộng
    • Tên tệp không có phần mở rộng
  • Lấy tên thư mục [thư mục] từ một đường dẫn.
    basename = os.path.basename[filepath]
    print[basename]
    # filename.ext
    
    print[type[basename]]
    # 
    
    5
  • Lấy cặp tên tệp và thư mục.
    basename = os.path.basename[filepath]
    print[basename]
    # filename.ext
    
    print[type[basename]]
    # 
    
    6
  • Lưu ý khi một chuỗi đường dẫn chỉ ra một thư mục
  • Nhận phần mở rộng.
    basename = os.path.basename[filepath]
    print[basename]
    # filename.ext
    
    print[type[basename]]
    # 
    
    7
    • Tạo chuỗi đường dẫn có phần mở rộng khác
    • Lấy phần mở rộng không có dấu chấm [dấu chấm]
    • Ví dụ về các trường hợp như
      basename = os.path.basename[filepath]
      print[basename]
      # filename.ext
      
      print[type[basename]]
      # 
      
      8
  • Tạo chuỗi đường dẫn bằng cách kết hợp tên tệp và thư mục.
    basename = os.path.basename[filepath]
    print[basename]
    # filename.ext
    
    print[type[basename]]
    # 
    
    9
    • Tạo một chuỗi đường dẫn cho một tệp khác trong cùng thư mục
  • Sử dụng các định dạng hệ điều hành khác nhau
  • Ví dụ cho Windows
    • Dấu gạch chéo ngược và chuỗi thô
    • Ví dụ về lấy tên tệp, tên thư mục, phần mở rộng
    • Nhận và tham gia một ký tự ổ đĩa.
      basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
      print[basename_without_ext]
      # filename
      
      0

Sử dụng chuỗi đường dẫn sau làm ví dụ

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
0

nguồn.

Mã mẫu bên dưới đang chạy trên máy Mac. Ví dụ cho Windows được hiển thị ở cuối

Trong Trăn 3. 4 trở lên, bạn cũng có thể lấy tên tệp, tên thư mục [thư mục], phần mở rộng, v.v. , với mô-đun pathlib coi đường dẫn là đối tượng

  • pathlib — Đường dẫn hệ thống tệp hướng đối tượng — Python 3. 9. tài liệu 1rc1

Liên kết được tài trợ

Sự khác biệt trong dấu phân cách đường dẫn của hệ điều hành

Dấu tách đường dẫn phụ thuộc vào hệ điều hành. UNIX [bao gồm Mac] sử dụng dấu gạch chéo

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
1 và Windows sử dụng dấu gạch chéo ngược
basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
2 làm dấu phân cách

Bạn có thể lấy dấu tách trong HĐH chạy Python với

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
3 hoặc
basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
4

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
5

nguồn.

Lấy tên tệp [tên cơ sở] từ một đường dẫn.
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4

Sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4 để lấy tên tệp [tên cơ sở] từ chuỗi đường dẫn

Tên tệp có phần mở rộng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4 trả về tên tệp có phần mở rộng

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
9

nguồn.

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 

nguồn.

Tên tệp không có phần mở rộng

Bạn có thể lấy tên tệp mà không cần phần mở rộng với

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7 được mô tả sau

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename

nguồn.

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7 tách ở dấu chấm cuối cùng [bên phải]
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40. Nếu bạn muốn chia theo dấu chấm đầu tiên [bên trái]
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40, hãy sử dụng
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
42

  • Tách chuỗi trong Python [dấu phân cách, ngắt dòng, regex, v.v. ]

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4

nguồn.

Lấy tên thư mục [thư mục] từ một đường dẫn.
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
5

Sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
5 để lấy thư mục thư mục [tên] từ một chuỗi đường dẫn

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
9

nguồn.

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
1

nguồn.

Nếu bạn chỉ muốn lấy tên thư mục ngay phía trên tệp, hãy sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
3

nguồn.

Lấy cặp tên tệp và thư mục.
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
6

Sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
6 để lấy cả tên tệp và thư mục [thư mục]

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
6 trả về một bộ tên tệp được trả về bởi
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4 và tên thư mục được trả về bởi
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
5

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
9

nguồn.

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
50

nguồn.

Bạn có thể giải nén tuple để gán cho từng biến

  • Giải nén một bộ và liệt kê trong Python

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
51

nguồn.

Sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9 được mô tả sau để nối lại tên tệp và thư mục

Lưu ý khi một chuỗi đường dẫn chỉ ra một thư mục

Lưu ý rằng nếu chuỗi đường dẫn chỉ ra một thư mục [thư mục] thì kết quả sẽ khác tùy thuộc vào việc có dấu phân cách ở cuối hay không

Không có dấu phân cách ở cuối

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
52

nguồn.

Nếu có dấu phân cách ở cuối, hãy sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
5 và
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
4 để lấy tên thư mục dưới cùng

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
53

nguồn.

Liên kết được tài trợ

Nhận phần mở rộng.
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7

Sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7 để nhận tiện ích mở rộng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7 tách phần mở rộng và phần mở rộng khác rồi trả về dưới dạng một bộ. Phần mở rộng chứa dấu chấm
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
9

nguồn.

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
55

nguồn.

Nối với toán tử

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
98 trả về chuỗi đường dẫn ban đầu

  • Nối các chuỗi trong Python [toán tử +, nối, v.v. ]

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
56

nguồn.

Tạo chuỗi đường dẫn có phần mở rộng khác

Để tạo một chuỗi đường dẫn chỉ có phần mở rộng được thay đổi so với phần gốc, hãy nối phần tử đầu tiên của bộ dữ liệu được trả về bởi

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7 với bất kỳ phần mở rộng nào

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
57

nguồn.

Lấy phần mở rộng không có dấu chấm [dấu chấm]

Nếu bạn muốn lấy phần mở rộng không có dấu chấm [dấu chấm]

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40, hãy chỉ định chuỗi thứ hai và chuỗi tiếp theo với lát cắt
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
11

  • Cách cắt danh sách, chuỗi, tuple trong Python

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
58

nguồn.

Ví dụ về các trường hợp như
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
8

Như thể hiện trong ví dụ trên,

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7 tách ra ở dấu chấm cuối cùng [bên phải]
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40. Hãy cẩn thận với các tiện ích mở rộng như
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
8

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
59

nguồn.

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
90

nguồn.

Nếu bạn muốn chia theo dấu chấm đầu tiên [bên trái]

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40 trong tên tệp, hãy sử dụng phương thức
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
42 của chuỗi, nhưng nó không hoạt động nếu tên thư mục cũng chứa dấu chấm
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
91

nguồn.

Sau khi tách với

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
6, hãy áp dụng phương pháp
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
42 của chuỗi và nối với
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9 được mô tả sau

Chuỗi được trả về bởi

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
42 không chứa dấu phân cách, vì vậy hãy cẩn thận nếu bạn muốn nhận phần mở rộng có dấu chấm
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
40 như
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
7

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
92

nguồn.

Tạo chuỗi đường dẫn bằng cách kết hợp tên tệp và thư mục.
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9

Sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9 để nối tên tệp và thư mục để tạo chuỗi đường dẫn mới

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
93

nguồn.

Tạo một chuỗi đường dẫn cho một tệp khác trong cùng thư mục

Nếu bạn muốn tạo một chuỗi đường dẫn cho một tệp khác trong cùng thư mục của một tệp, hãy sử dụng

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
5 và
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
9

nguồn.

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
95

nguồn.

Sử dụng các định dạng hệ điều hành khác nhau

Nếu bạn muốn thao tác chuỗi đường dẫn ở định dạng HĐH không phải là HĐH mà Python hiện đang chạy, hãy nhập và sử dụng các mô-đun khác thay vì mô-đun

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
39

  • UNIX [bao gồm cả máy Mac hiện tại].
    ['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
    90
  • các cửa sổ.
    ['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
    91
  • Macintosh 9 trở về trước.
    ['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
    92

Vì mỗi mô-đun có giao diện giống như

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
3, nên bạn có thể thay đổi phần
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
3 của mã mẫu thành tên mô-đun của chúng [chẳng hạn như
['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
91]

Ví dụ cho Windows

Mã mẫu bên dưới đang chạy trên Mac bằng mô-đun

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
91 được đề cập ở trên. Khi chạy trên Windows, bạn có thể thay thế
['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
91 bằng
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
3

Dấu gạch chéo ngược và chuỗi thô

Dấu phân cách đường dẫn trong Windows là dấu gạch chéo ngược

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
2

Để viết dấu gạch chéo ngược trong một chuỗi, bạn cần viết hai dấu gạch chéo ngược để thoát.

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
500 xuất ra một dấu gạch chéo ngược

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
96

nguồn.

Chuỗi thô [

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
501] giúp viết đường dẫn Windows dễ dàng hơn vì bạn có thể viết dấu gạch chéo ngược. Một chuỗi thô và một chuỗi bình thường có giá trị bằng nhau

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
97

nguồn.

Để biết thêm thông tin về chuỗi thô, hãy xem bài viết sau

  • Chuỗi thô trong Python

Ví dụ lấy tên tệp, tên thư mục, phần mở rộng

Nó cũng hoạt động trên Windows

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
98

nguồn.

Nhận và tham gia một ký tự ổ đĩa.
basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
0

Sử dụng

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
0 để lấy ký tự ổ đĩa. Mã mẫu bên dưới sử dụng
['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
504

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
0 tách ký tự ổ đĩa bao gồm cả dấu hai chấm
['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
506 và những ký tự khác

['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
99

nguồn.

Nếu chỉ muốn lấy ký tự ổ đĩa thì chọn ký tự đầu tiên

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
0

nguồn.

Hãy cẩn thận khi tham gia các ký tự ổ đĩa

Nếu bạn chuyển nó cho

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9 như hiện tại, nó sẽ không hoạt động

basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
1

nguồn.

Bạn cũng có thể chỉ định

basename_without_ext = os.path.splitext[os.path.basename[filepath]][0]
print[basename_without_ext]
# filename
3 [
['D:TP\smpl.htm', 'D:TP\spyder_pythons\smpl.htm']
509 trong mã mẫu] trong đối số của
basename = os.path.basename[filepath]
print[basename]
# filename.ext

print[type[basename]]
# 
9 hoặc thêm dấu phân cách vào ký tự ổ đĩa

Chủ Đề