Hướng dẫn python pass raw string as argument - python chuyển chuỗi thô làm đối số

Tôi muốn chuyển trong một chuỗi vào tập lệnh Python của tôi có chứa các chuỗi thoát như:

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
3 hoặc
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
4 và không gian. Tuy nhiên khi tôi vượt qua chuỗi của mình như:
However when I pass in my string as:

some string\x00 more \tstring

Python coi chuỗi của tôi là một chuỗi thô và khi tôi in chuỗi đó từ bên trong tập lệnh, nó in chuỗi theo nghĩa đen và nó không coi

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
5 là một chuỗi thoát. tức là nó in chính xác chuỗi trên.
i.e. it prints exactly the string above.

Cập nhật: (Một lần nữa) Tôi đang sử dụng Python 2.7.5 để sao chép, tạo tập lệnh, hãy gọi nó là

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
6:
I'm using python 2.7.5 to reproduce, create a script, lets call it
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
6:

import sys
print(sys.argv[1])

Bây giờ hãy lưu nó và gọi nó từ dấu nhắc lệnh Windows như vậy:

c:\Python27\python.exe myscript.py "abcd \x00 abcd"

Kết quả tôi nhận được là:

> 'abcd \x00 abcd'

P.S Trong tập lệnh thực tế của tôi, tôi đang sử dụng trình phân tích cú pháp tùy chọn, nhưng cả hai đều có cùng một hiệu ứng. Có lẽ có một tham số tôi có thể đặt cho trình phân tích cú pháp tùy chọn để xử lý các chuỗi thoát?

Chuỗi RAW Python được tạo bằng tiền tố một chuỗi theo nghĩa đen với ‘r, hoặc‘ r. Chuỗi thô Python coi Backslash (\) là một ký tự theo nghĩa đen. Điều này rất hữu ích khi chúng tôi muốn có một chuỗi chứa dấu gạch chéo ngược và don không muốn nó được coi là một nhân vật thoát.

Chuỗi Raw Python

Hãy nói rằng chúng tôi muốn tạo một chuỗi hi \ nhello trong Python. Nếu chúng ta cố gắng gán nó cho một chuỗi bình thường, \ n sẽ được coi là một dòng mới.Hi\nHello in python. If we try to assign it to a normal string, the \n will be treated as a new line.

s = 'Hi\nHello'
print(s)

Đầu ra:

Hi
Hello

Hãy cùng xem chuỗi RAW giúp chúng ta coi việc đánh dấu dấu gạch chéo ngược như một nhân vật bình thường như thế nào.

raw_s = r'Hi\nHello'
print(raw_s)

Đầu ra:

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
7 Hãy cùng xem một ví dụ khác trong đó nhân vật theo sau là dấu gạch chéo ngược không có ý nghĩa đặc biệt nào.

>>> s = 'Hi\xHello'
  File "", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \xXX escape

Chúng tôi đã gặp lỗi vì Python không biết cách giải mã ‘\ x, vì nó không có ý nghĩa đặc biệt nào. Hãy để xem cách chúng ta có thể tạo cùng một chuỗi bằng các chuỗi thô.

>>> s = r'Hi\xHello'
>>> print(s)
Hi\xHello

Nếu bạn đang ở trên bảng điều khiển Python và tạo một chuỗi thô như dưới đây.

>>> r'Hi\xHello'
'Hi\\xHello'

Don Tiết bị nhầm lẫn với đầu ra có hai dấu gạch chéo ngược. Nó chỉ để hiển thị nó như một chuỗi Python bình thường, trong đó dấu gạch chéo ngược đang bị thoát ra.

Chuỗi và trích dẫn Python Raw

Khi một dấu gạch chéo ngược được theo sau bởi một trích dẫn trong một chuỗi thô, nó đã thoát ra. Tuy nhiên, dấu gạch chéo ngược cũng vẫn còn trong kết quả. Vì tính năng này, chúng tôi có thể tạo ra một chuỗi RAW của dấu gạch chéo ngược. Ngoài ra, một chuỗi thô có thể có một số ít các dấu gạch chéo ngược ở cuối. Một số chuỗi thô không hợp lệ là:

import sys
print(sys.argv[1])
0

Hãy cùng xem xét một số ví dụ chuỗi thô hợp lệ với các trích dẫn.

import sys
print(sys.argv[1])
1

Output:

import sys
print(sys.argv[1])
2

Đó là tất cả để giới thiệu nhanh chuỗi Raw Python.

Bạn có thể kiểm tra toàn bộ tập lệnh Python và nhiều ví dụ về Python từ Kho lưu trữ GitHub của chúng tôi.

Muốn tìm hiểu thêm? Tham gia cộng đồng DigitalOcean!

Tham gia cộng đồng DigitalOcean của chúng tôi miễn phí hơn một triệu nhà phát triển! Nhận trợ giúp và chia sẻ kiến ​​thức trong phần Câu hỏi & Câu trả lời của chúng tôi, tìm hướng dẫn và công cụ sẽ giúp bạn phát triển như một nhà phát triển và mở rộng quy mô dự án hoặc doanh nghiệp của bạn, và đăng ký các chủ đề quan tâm.

Đăng ký

Trong Python, các chuỗi có tiền tố với

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
8 hoặc
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
9, chẳng hạn như
> 'abcd \x00 abcd'
0 và
> 'abcd \x00 abcd'
1, được gọi là các chuỗi thô và coi dấu gạch chéo ngược
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
5 là ký tự theo nghĩa đen. Chuỗi thô rất hữu ích khi xử lý các chuỗi sử dụng nhiều dấu gạch chéo ngược, chẳng hạn như đường dẫn Windows và các mẫu biểu thức thông thường.

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

  • Trình tự thoát
  • Chuỗi thô coi dấu gạch chéo ngược như các ký tự theo nghĩa đen
  • Chuyển đổi chuỗi bình thường thành chuỗi thô với
    > 'abcd \x00 abcd'
    
    3
  • Chuỗi thô không thể kết thúc bằng một số ít các dấu gạch chéo ngược

Trình tự thoát

Chuỗi thô coi dấu gạch chéo ngược như các ký tự theo nghĩa đen

  • Chuyển đổi chuỗi bình thường thành chuỗi thô với
    > 'abcd \x00 abcd'
    
    3

import sys
print(sys.argv[1])
3

Chuỗi thô coi dấu gạch chéo ngược như các ký tự theo nghĩa đen

Chuyển đổi chuỗi bình thường thành chuỗi thô với

> 'abcd \x00 abcd'
3

import sys
print(sys.argv[1])
4

Chuỗi thô không thể kết thúc bằng một số ít các dấu gạch chéo ngược

import sys
print(sys.argv[1])
5

Trong Python, các ký tự không thể được biểu diễn trong một chuỗi bình thường (chẳng hạn như các tab, nguồn cấp dữ liệu., V.v.) được mô tả bằng cách sử dụng chuỗi thoát với dấu gạch chéo ngược

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
5 (như
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
4 hoặc
> 'abcd \x00 abcd'
6), tương tự như ngôn ngữ C.

  • 2. Phân tích từ vựng - Chuỗi và byte theo nghĩa đen - Python 3.9.7 Tài liệu

import sys
print(sys.argv[1])
6

Các chuỗi có tiền tố với c:\Python27\python.exe myscript.py "abcd \x00 abcd" 8 hoặc c:\Python27\python.exe myscript.py "abcd \x00 abcd" 9, chẳng hạn như > 'abcd \x00 abcd' 0 và > 'abcd \x00 abcd' 1, được gọi là chuỗi thô và coi dấu gạch chéo ngược c:\Python27\python.exe myscript.py "abcd \x00 abcd" 5 là ký tự nghĩa đen. Trong các chuỗi thô, các chuỗi thoát không được đối xử đặc biệt.

Không có loại đặc biệt cho chuỗi thô; Nó chỉ là một chuỗi, tương đương với một chuỗi thông thường với các dấu gạch chéo ngược được biểu thị bằng

s = 'Hi\nHello'
print(s)
2.

Trong một chuỗi bình thường, một chuỗi thoát được coi là một ký tự, nhưng trong một chuỗi thô, các dấu gạch chéo ngược cũng được tính là ký tự.

import sys
print(sys.argv[1])
7

Nhận độ dài của một chuỗi (số lượng ký tự) trong Python

import sys
print(sys.argv[1])
8

Chuyển đổi chuỗi bình thường thành chuỗi thô với > 'abcd \x00 abcd' 3

Chuỗi thô không thể kết thúc bằng một số ít các dấu gạch chéo ngược

  • Trong Python, các ký tự không thể được biểu diễn trong một chuỗi bình thường (chẳng hạn như các tab, nguồn cấp dữ liệu., V.v.) được mô tả bằng cách sử dụng chuỗi thoát với dấu gạch chéo ngược
    c:\Python27\python.exe myscript.py "abcd \x00 abcd"
    
    5 (như
    c:\Python27\python.exe myscript.py "abcd \x00 abcd"
    
    4 hoặc
    > 'abcd \x00 abcd'
    
    6), tương tự như ngôn ngữ C.

import sys
print(sys.argv[1])
9

2. Phân tích từ vựng - Chuỗi và byte theo nghĩa đen - Python 3.9.7 Tài liệu

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
0

Các chuỗi có tiền tố với

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
8 hoặc
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
9, chẳng hạn như
> 'abcd \x00 abcd'
0 và
> 'abcd \x00 abcd'
1, được gọi là chuỗi thô và coi dấu gạch chéo ngược
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
5 là ký tự nghĩa đen. Trong các chuỗi thô, các chuỗi thoát không được đối xử đặc biệt.

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
1

Chuỗi thô không thể kết thúc bằng một số ít các dấu gạch chéo ngược

Trong Python, các ký tự không thể được biểu diễn trong một chuỗi bình thường (chẳng hạn như các tab, nguồn cấp dữ liệu., V.v.) được mô tả bằng cách sử dụng chuỗi thoát với dấu gạch chéo ngược

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
5 (như
c:\Python27\python.exe myscript.py "abcd \x00 abcd"
4 hoặc
> 'abcd \x00 abcd'
6), tương tự như ngôn ngữ C.

  • 2. Phân tích từ vựng - Chuỗi và byte theo nghĩa đen - Python 3.9.7 Tài liệu

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
2

Làm thế nào để bạn vượt qua một chuỗi thô trong Python?

Chuỗi RAW Python được tạo bằng tiền tố một chuỗi theo nghĩa đen với 'r' hoặc 'r'. Chuỗi thô Python coi Backslash (\) là một ký tự theo nghĩa đen. Điều này rất hữu ích khi chúng tôi muốn có một chuỗi chứa dấu gạch chéo ngược và không muốn nó được coi là một nhân vật thoát.prefixing a string literal with 'r' or 'R'. Python raw string treats backslash (\) as a literal character. This is useful when we want to have a string that contains backslash and don't want it to be treated as an escape character.

\ R làm gì trong Python?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape". Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển. Ngược lại, tiền tố một ký tự đặc biệt với "\" biến nó thành một ký tự thông thường.carriage return. Conversely, prefixing a special character with "\" turns it into an ordinary character.

Chuỗi thô trong Python Regex là gì?

Theo tài liệu Python, ký hiệu chuỗi thô (R "văn bản") giữ các biểu thức thường xuyên có ý nghĩa và không nhầm lẫn.Nếu không có nó, mọi dấu gạch chéo ngược ('\') trong một biểu thức thông thường sẽ phải được đặt trước với một biểu thức khác để thoát khỏi nó.Ví dụ: hai dòng mã sau đây có chức năng giống hệt nhau - >>> re.keeps regular expressions meaningful and confusion-free. Without it, every backslash ('\') in a regular expression would have to be prefixed with another one to escape it. For example, the two following lines of code are functionally identical − >>> re.

Làm thế nào chúng ta có thể làm cho một tab chuỗi thành một chuỗi thô?

Chuỗi thô theo nghĩa đen trong c ++ \ n được sử dụng để trả con trỏ cho dòng tiếp theo, \ t tạo một tab, v.v. Nếu chúng ta muốn in các ký tự này vào đầu ra mà không thấy hiệu ứng của chúng, chúng ta có thể sử dụng chuỗi thôcách thức.Để tạo một chuỗi vào chuỗi RAW, chúng ta phải thêm "r" trước chuỗi.add "R" before the string.