Vấn đề ..
Giả sử bạn cần kiểm tra phần đầu hoặc phần cuối của một chuỗi để tìm một mẫu văn bản cụ thể. Các mẫu phổ biến có thể là phần mở rộng tên tệp nhưng cũng có thể là bất kỳ thứ gì. Tôi sẽ chỉ cho bạn một số phương pháp về cách bạn có thể thực hiện việc này.
Phương thức startswith ()
Một cách đơn giản để kiểm tra sự bắt đầu của một chuỗi là sử dụng phương thức startwith ().
Ví dụ
text = "Is USA colder than Australia?" print(f"output \n {text.startswith('Is')}")
Đầu ra
True
Ví dụ
filename = "Hello_world.txt" print(f"output \n {filename.startswith('Hello')}")
Đầu ra
True
Ví dụ
site_url = 'https://www.something.com' print(f"output \n {site_url.startswith('http:')}")
Đầu ra
False
Ví dụ
print(f"output \n {site_url.startswith('https:')}")
Đầu ra
TruePhương thức
endwith ().
Một cách đơn giản để kiểm tra phần cuối của một chuỗi là sử dụng phương thức endwith ().
Đầu ra
text = "Is USA colder than Australia?" print(f"output \n {text.endswith('?')}")
Đầu ra
True
Ví dụ
filename = "Hello_world.txt" print(f"output \n {filename.endswith('.txt')}")
Đầu ra
True
Bây giờ nếu chúng ta muốn kiểm tra nhiều lựa chọn bằng các phương pháp trên, chúng ta cần cung cấp các bộ giá trị. Một trong những cách sử dụng phổ biến là kiểm tra phần mở rộng tệp, giả sử chúng tôi cần xác thực cho các tệp ".txt" và ".csv" trong một thư mục.
import os filenames = os.listdir('.')
# Let us first check if there are files print(f"output \n {any(name.endswith(('.csv',',txt')) for name in filenames)}")
Đầu ra
True
Đầu ra
[name for name in filenames if name.endswith(('.csv', '.txt')) ]
Đầu ra
['file1.csv', 'HRDataset.csv', 'Input.csv', 'input.txt', 'input_copy.txt', 'movies_data.csv', 'my_html_data_to_csv.csv', 'temporary_file1_for_zip.csv', 'temporary_file2_for_zip.csv', 'test.csv', 'test1.txt', 'test2.txt', 'tmdb_5000_movies.csv']
Hãy nhớ rằng các phương thức này chấp nhận các bộ giá trị, nếu bạn có một danh sách các lựa chọn để tìm kiếm, thì chúng tôi cần chuyển đổi chúng thành các bộ giá trị.
import os # list with choices patters = ['.csv','.txt'] # get the file names filenames = os.listdir('.') # Let us first check if there are files any(name.endswith(patters) for name in filenames)
Đầu ra
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) in 8 9 # Let us first check if there are files ---> 10 any(name.endswith(patters) for name in filenames) in (.0) 8 9 # Let us first check if there are files ---> 10 any(name.endswith(patters) for name in filenames) TypeError: endswith first arg must be str or a tuple of str, not list
Lệnh trên trả về một lỗi, vì vậy chúng tôi cần chuyển đổi danh sách thành một bộ tuple.
Ví dụ
# Let us first check if there are files any(name.endswith(tuple(patters)) for name in filenames)
Đầu ra
True
Tương tự, chúng ta cần chuyển đổi danh sách thành tuple để lấy tên tệp.
Ví dụ
[name for name in filenames if name.endswith(tuple(patters)) ]
Đầu ra
['file1.csv', 'HRDataset.csv', 'Input.csv', 'input.txt', 'input_copy.txt', 'movies_data.csv', 'my_html_data_to_csv.csv', 'temporary_file1_for_zip.csv', 'temporary_file2_for_zip.csv', 'test.csv', 'test1.txt', 'test2.txt', 'tmdb_5000_movies.csv']
Cuối cùng, các phương thức startwith () và endwith () trông đẹp mắt khi kết hợp với các hoạt động khác, chẳng hạn như giảm dữ liệu thông thường. Ví dụ:
Ví dụ
if any(name.endswith(tuple(patters)) for name in filenames): <perform the logic here>