Python regex xóa không phải chữ và số

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 hoàn toàn tin tưởng rằng tất cả tên tệp và đường dẫn phải là

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
4 hoặc
# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
5. 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à

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
6 [e. g. ,
# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
7]. 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

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
8 và
# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
9 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] [

'Temperature C'
0] và dấu phần trăm [
'Temperature C'
1] 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 ra [
'Temperature C'
2] 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í

ugly_string = "Temperature [°C]"

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 khả năng hiểu danh sách để loại bỏ một chuỗi ký tự không phải chữ và số. Trong Python, một đối tượng

'Temperature C'
3 là một loại trình tự, đó 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
'Temperature C'
4 tích hợp để kiểm tra các ký tự chữ và số và
'Temperature C'
5 để kiểm tra khoảng trắng

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string

'Temperature C'

làm sạch Pythonic. Lọc

Cách tiếp cận rõ ràng thứ hai là sử dụng hàm

'Temperature C'
6 tích hợp để 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 được kết hợp với các hàm lambda

Hàm

'Temperature C'
6 khá đơn giản. nó nhận một hàm trả về
'Temperature C'
8 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ề
'Temperature C'
9 hoặc
# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
90. Chỉ các phần tử trả về
'Temperature C'
9 được giữ lại

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
9

'Temperature C'

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

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
92. 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

  • # list comprehension that filters out bad characters
    clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]
    
    # rejoin intermediate list into a string
    clean_string = "".join[clean_string]
    
    clean_string
    
    93. 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ợp
  • # list comprehension that filters out bad characters
    clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]
    
    # rejoin intermediate list into a string
    clean_string = "".join[clean_string]
    
    clean_string
    
    94. So khớp các ký tự số trong phạm vi đã cho
  • # list comprehension that filters out bad characters
    clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]
    
    # rejoin intermediate list into a string
    clean_string = "".join[clean_string]
    
    clean_string
    
    95. Khớp các ký tự chữ cái viết thường trong phạm vi đã cho
  • # list comprehension that filters out bad characters
    clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]
    
    # rejoin intermediate list into a string
    clean_string = "".join[clean_string]
    
    clean_string
    
    96. Khớp các ký tự chữ cái viết hoa trong phạm vi đã cho
  • # list comprehension that filters out bad characters
    clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]
    
    # rejoin intermediate list into a string
    clean_string = "".join[clean_string]
    
    clean_string
    
    97. Khớp với bất kỳ ký tự khoảng trắng nào
  • # list comprehension that filters out bad characters
    clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]
    
    # rejoin intermediate list into a string
    clean_string = "".join[clean_string]
    
    clean_string
    
    98. Khớp với một hoặc nhiều phần tử trước đó [i. e. , tập phủ định]

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
0

'Temperature C'

Màn biểu diễn

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

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
2

Sử dụng lệnh ma thuật Jupyter tích hợp sẵn

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
99, chúng tôi có thể xác thực hiệu suất của từng phương thức

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
4

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
5

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
0

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
1

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
2

# list comprehension that filters out bad characters
clean_string = [s for s in ugly_string if s.isalnum[] or s.isspace[]]

# rejoin intermediate list into a string
clean_string = "".join[clean_string]

clean_string
3

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

Chủ Đề