Trong đó, search[] được sử dụng để tìm kiếm regex[] thích hợp cho chữ và số, sau đó kết quả được cắt cho đến lần xuất hiện đầu tiên của ký tự không phải chữ và số
Python3
The original string is : geeks4g!!!eeks The resultant string : geeks4g1
The original string is : geeks4g!!!eeks The resultant string : geeks4g2
The original string is : geeks4g!!!eeks The resultant string : geeks4g3
The original string is : geeks4g!!!eeks The resultant string : geeks4g4
The original string is : geeks4g!!!eeks The resultant string : geeks4g5
The original string is : geeks4g!!!eeks The resultant string : geeks4g6
The original string is : geeks4g!!!eeks The resultant string : geeks4g7____58
The original string is : geeks4g!!!eeks The resultant string : geeks4g0
The original string is : geeks4g!!!eeks The resultant string : geeks4g1
The original string is : geeks4g!!!eeks The resultant string : geeks4g2
The original string is : geeks4g!!!eeks The resultant string : geeks4g3
The original string is : geeks4g!!!eeks The resultant string : geeks4g4
The original string is : geeks4g!!!eeks The resultant string : geeks4g5
The original string is : geeks4g!!!eeks The resultant string : geeks4g6
The original string is : geeks4g!!!eeks The resultant string : geeks4g7
The original string is : geeks4g!!!eeks The resultant string : geeks4g8
The original string is : geeks4g!!!eeks The resultant string : geeks4g9
The original string is : geeks4g!!!eeks The resultant string : geeks4g8
The original string is : geeks4g!!!eeks The resultant string : geeks4g11
The original string is : geeks4g!!!eeks The resultant string : geeks4g12
The original string is : geeks4g!!!eeks The resultant string : geeks4g13
The original string is : geeks4g!!!eeks The resultant string : geeks4g9
The original string is : geeks4g!!!eeks The resultant string : geeks4g8
The original string is : geeks4g!!!eeks The resultant string : geeks4g16
The original string is : geeks4g!!!eeks The resultant string : geeks4g17
The original string is : geeks4g!!!eeks The resultant string : geeks4g18
The original string is : geeks4g!!!eeks The resultant string : geeks4g19
The original string is : geeks4g!!!eeks The resultant string : geeks4g20
The original string is : geeks4g!!!eeks The resultant string : geeks4g2______03
The original string is : geeks4g!!!eeks The resultant string : geeks4g23
The original string is : geeks4g!!!eeks The resultant string : geeks4g5
The original string is : geeks4g!!!eeks The resultant string : geeks4g6
The original string is : geeks4g!!!eeks The resultant string : geeks4g26
Đầu ra
The original string is : geeks4g!!!eeks The resultant string : geeks4g
Thời gian phức tạp. Trên]
Không gian phụ trợ. Trên]
Phương pháp #2. Sử dụng findall[]
Đây là một cách regex khác để giải quyết vấn đề này. Trong phần này, chúng tôi trích xuất chuỗi con đầu tiên trước ký tự không phải năm bằng cách truy cập vào chỉ mục thứ 0
Tôi có một lời thú nhận những thứ đã làm. Tôi là một stickler cho tên tập tin. Tôi hết lòng tin rằng tất cả tên tệp và đường dẫn phải là
The original string is : geeks4g!!!eeks The resultant string : geeks4g64 hoặc
The original string is : geeks4g!!!eeks The resultant string : geeks4g65. Khoảng cách, cách viết hoa và các ký tự không phải chữ và số khiến tôi phát điên
Nỗi ám ảnh của tôi đến từ nhiều năm nhảy qua nhảy lại giữa Linux [lập trình, máy chủ], Windows [CAD] và MacOS [máy tính xách tay cá nhân], trong đó mỗi hệ thống có các tiêu chuẩn tên tệp thực tế khác nhau. Do đó, cuối cùng tôi đã hội tụ về các tên tệp đơn giản và hà khắc để đảm bảo việc thu thập dữ liệu dễ dàng khi tôi cần thực hiện tự động hóa
Bây giờ, tôi hiểu rằng có những lúc mức độ cứng nhắc này không hoàn toàn có ý nghĩa. Một ví dụ là trong kỹ thuật cơ khí khi làm việc với hệ thống PDM [và các bên liên quan không phải là nhà phát triển]. Thông lệ phổ biến là đặt tên tệp của bạn là
The original string is : geeks4g!!!eeks The resultant string : geeks4g66 [e. g. ,
The original string is : geeks4g!!!eeks The resultant string : geeks4g67]. Có, có khoảng trắng, nhưng miễn là lược đồ được thực thi, cơ sở dữ liệu sẽ vẫn dễ dàng phân tích cú pháp bằng máy
Nếu chúng ta mở rộng dòng suy nghĩ này từ tên tệp thành một “đường dẫn” hoặc “vị trí tài nguyên” tổng quát [e. g. , URL, tiêu đề cột dữ liệu, nhãn dữ liệu], các lược đồ nghiêm ngặt và nhất quán được nhập, dưới dạng chi tiết
Và các ký tự không chữ và số là ác. Họ chỉ gây đau đầu cho mọi người
Vệ sinh tất cả các chuỗi
Xác thực và làm sạch chuỗi đảm bảo rằng một chuỗi đáp ứng một bộ tiêu chí [xác thực] hoặc sửa đổi nó để phù hợp với lược đồ [làm sạch]. Như đã thảo luận ở trên, có rất nhiều tình huống quan trọng khi các chuỗi đến [e. g. , nhãn dữ liệu, đường dẫn, tên tệp] có thể không tuân theo tiêu chuẩn và hoạt động không mong muốn. Như đã thảo luận trước đây trong bài phân tích dữ liệu nhiệt độ và độ ẩm, các bước
The original string is : geeks4g!!!eeks The resultant string : geeks4g68 và
The original string is : geeks4g!!!eeks The resultant string : geeks4g69 của quy trình làm việc ETL thường áp dụng một số thao tác làm sạch dữ liệu. Tách các ký tự không phải chữ và số là một bước đơn giản và hữu ích cho nhiều ứng dụng xử lý dữ liệu
Như đã thấy trong bài viết trước của chúng tôi, bộ ghi dữ liệu đã cố gắng trở nên lạ mắt và sử dụng ký hiệu độ [ác] [
The original string is : geeks4g!!!eeks The resultant string : geeks4g20] và dấu phần trăm [
The original string is : geeks4g!!!eeks The resultant string : geeks4g21] cho các tiêu đề cột nhiệt độ và độ ẩm, tương ứng. Thật không may, điều này không phải là hiếm và trong khi Excel phân tích cú pháp các chuỗi này một cách bình thường, chúng tôi không thể luôn đảm bảo các hệ thống hoặc chương trình khác nhau sẽ phản ứng như thế nào. Ví dụ: trong LaTeX, dấu phần trăm là ký tự đặc biệt cho nhận xét và do đó cần phải thoát [
The original string is : geeks4g!!!eeks The resultant string : geeks4g22] nếu không bạn sẽ có một ngày tồi tệ
Vì vậy, hãy xem cách dọn dẹp chuỗi hiệu quả trong Python. Đưa ra một chuỗi xấu xí
The original string is : geeks4g!!!eeks The resultant string : geeks4g5
Chúng tôi có ba lựa chọn. hai cách Pythonic và một cách quá mức cần thiết. Cũng giả sử rằng chúng ta muốn giữ các ký tự khoảng trắng
làm sạch Pythonic. Danh sách hiểu
Một cách tiếp cận không được tối ưu hóa nhưng rõ ràng và dễ đọc là chỉ cần sử dụng để tách một chuỗi ký tự không phải chữ và số. Trong Python, đó là lý do tại sao các phương pháp hiểu danh sách hoạt động. Chúng tôi sẽ sử dụng tính năng tích hợp sẵn để kiểm tra các ký tự chữ và số và kiểm tra khoảng trắng
The original string is : geeks4g!!!eeks The resultant string : geeks4g6
The original string is : geeks4g!!!eeks The resultant string : geeks4g2
làm sạch Pythonic. Lọc
Cách tiếp cận rõ ràng thứ hai là sử dụng để lọc ra các ký tự không tuân thủ. Đây là một chức năng thú vị hữu ích trong nhiều tình huống khác nhau, đặc biệt là khi kết hợp với
Hàm
The original string is : geeks4g!!!eeks The resultant string : geeks4g26 khá đơn giản. nó nhận một hàm trả về
The original string is : geeks4g!!!eeks The resultant string : geeks4g28 và một hàm có thể lặp lại. Đối với mỗi phần tử của iterable, hàm đã cho trả về
The original string is : geeks4g!!!eeks The resultant string : geeks4g29 hoặc
The original string is : geeks4g!!!eeks The resultant string : geeks4g10. Chỉ các phần tử trả về
The original string is : geeks4g!!!eeks The resultant string : geeks4g29 được giữ lại
The original string is : geeks4g!!!eeks The resultant string : geeks4g1
The original string is : geeks4g!!!eeks The resultant string : geeks4g2
Làm sạch quá mức cần thiết. biểu thức chính quy
Cách tiếp cận cuối cùng của chúng tôi là sử dụng Biểu thức chính quy [regex]. Regex thực sự mạnh mẽ và có thể được sử dụng trong nhiều tình huống và trên tất cả các ngôn ngữ lập trình. Mặc dù nó có một đường cong học tập tương đối khó khăn, nhưng nó chắc chắn là điều mà hầu hết các nhà phát triển và kỹ sư nên cố gắng hiểu và làm quen với
Tuy nhiên, theo ý kiến khiêm tốn của tôi, tùy thuộc vào ngữ cảnh, nó quá mức cần thiết
Vấn đề với regex là nó quá mạnh và quá linh hoạt. Các cách tiếp cận Pythonic được hiển thị ở trên rất dễ đọc, dễ gỡ lỗi và dễ hiểu phạm vi của chúng. Regex yêu cầu nhà phát triển kiểm tra biểu thức [trừ khi bạn là một loại trình hướng dẫn regex nào đó] và kiểm tra các trường hợp góc. Mặc dù ví dụ của bài đăng này khá tầm thường, nhưng không phải tất cả các tình huống đều có thể tha thứ được
Thành phần cốt lõi của phương pháp này là mẫu biểu thức chính quy. Đối với ví dụ này, chúng tôi sẽ sử dụng
The original string is : geeks4g!!!eeks The resultant string : geeks4g12. Theo giải thích của một trang web thử nghiệm regex, mẫu này bao gồm các yếu tố sau
The original string is : geeks4g!!!eeks The resultant string : geeks4g
13. Tập hợp bị phủ định khớp với bất kỳ ký tự nào KHÔNG có trong tập hợpThe original string is : geeks4g!!!eeks The resultant string : geeks4g
14. So khớp các ký tự số trong phạm vi đã choThe original string is : geeks4g!!!eeks The resultant string : geeks4g
15. Khớp các ký tự chữ cái viết thường trong phạm vi đã choThe original string is : geeks4g!!!eeks The resultant string : geeks4g
16. Khớp các ký tự chữ cái viết hoa trong phạm vi đã choThe original string is : geeks4g!!!eeks The resultant string : geeks4g
17. Khớp với bất kỳ ký tự khoảng trắng nàoThe original string is : geeks4g!!!eeks The resultant string : geeks4g
18. Khớp với một hoặc nhiều phần tử trước đó [i. e. , tập phủ định]
The original string is : geeks4g!!!eeks The resultant string : geeks4g2
The original string is : geeks4g!!!eeks The resultant string : geeks4g2
Hiệu suất
Nhưng Nicholas. Tôi không quan tâm đến khả năng đọc;
Vâng, chúng ta hãy xem. Như được hiển thị bên dưới, tôi đã hợp nhất ba cách tiếp cận thành các chức năng nhỏ để kiểm tra hiệu suất. Tôi cũng sẽ sử dụng một chuỗi Lorem Ipsum [lipsum] rất dài để kiểm tra hiệu suất, để không có kết quả sai lệch từ văn bản ngắn. Các bộ lọc sẽ loại bỏ dấu chấm, dấu phẩy và dấu chấm câu khác khỏi văn bản lipsum. Chuỗi này phải dài hơn bất kỳ URL, tiêu đề cột dữ liệu, tên tệp hoặc nhãn dữ liệu nào khác sẽ được làm sạch trong ngữ cảnh kỹ thuật
The original string is : geeks4g!!!eeks The resultant string : geeks4g4
Sử dụng , chúng ta có thể xác thực hiệu suất của từng phương thức
The original string is : geeks4g!!!eeks The resultant string : geeks4g5
The original string is : geeks4g!!!eeks The resultant string : geeks4g6
The original string is : geeks4g!!!eeks The resultant string : geeks4g60
The original string is : geeks4g!!!eeks The resultant string : geeks4g61
The original string is : geeks4g!!!eeks The resultant string : geeks4g62
The original string is : geeks4g!!!eeks The resultant string : geeks4g63
Vì vậy, mặc dù về mặt kỹ thuật, có vẻ như phương pháp regex là người chiến thắng, nhưng các phương pháp Pythonic đã đủ gần. Khả năng đọc quan trọng hơn [rất] tối ưu hóa hiệu suất nhỏ
hiệu suất bộ lọc dữ liệu chuỗi python regex str nhiệt độ
Nicholas Nadeau, Ph. D. , P. Anh
Nicholas Nadeau trao quyền cho các nhóm thông qua các dịch vụ CTO phân đoạn để xây dựng các công nghệ thế hệ tiếp theo. Đăng ký nhận bản tin của tôi để theo kịp các xu hướng mới nhất và khám phá các dịch vụ của tôi để bắt đầu sự đổi mới của bạn