Hướng dẫn python terminal control characters - ký tự điều khiển thiết bị đầu cuối python

Ngay bây giờ tôi đang cố gắng đọc và phân tích một tệp bằng Python 2. Người tạo tệp đã nhập một loạt các dòng trong thiết bị đầu cuối, với (ctrl a) s trong mỗi dòng và sao chép các dòng đó vào một tệp văn bản. Vì vậy, các dòng trong tệp trông giống như "(một cái gì đó)^a (cái gì đó)". Khi tôi sử dụng hàm readlines () trong python để đọc tệp, các chuỗi "^A" đó không thể được nhận ra.

Tôi đã cố gắng sử dụng io.open và codecs.open và đặt mã hóa thành UTF-8, nhưng "^A" rõ ràng không phải là chuỗi UTF-8. Có ai biết cách đọc các chuỗi lệnh điều khiển đặc biệt này từ một tệp bằng Python không? Cám ơn rất nhiều!

Đã hỏi ngày 27 tháng 6 năm 2018 lúc 21:18Jun 27, 2018 at 21:18

Hướng dẫn python terminal control characters - ký tự điều khiển thiết bị đầu cuối python

5

Chỉ cần đọc tệp ở chế độ nhị phân như vậy: open('file.txt', 'rb'). Ctrl-A sẽ là giá trị 1.

with open('test.txt', 'rb') as f:
    text = f.read()
    for char in text:
        if char == b'\x01': # \x01 stands for the byte with hex value 01
            # Do something
            pass
        else:
            # Do something else
            pass

Đã trả lời ngày 27 tháng 6 năm 2018 lúc 22:54Jun 27, 2018 at 22:54

Hướng dẫn python terminal control characters - ký tự điều khiển thiết bị đầu cuối python

XRiskXRiskxrisk

3.70021 huy hiệu bạc43 huy hiệu đồng21 silver badges43 bronze badges

1

Các ký tự điều khiển này là một phần của bộ ký tự ASCII, với các mã số dao động từ 0 đến 31 (hoặc 00 đến 1F trong hexadecimals). Để loại bỏ chúng khỏi một chuỗi, chỉ cần sử dụng thay thế regex:

import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)

Đã trả lời ngày 27 tháng 6 năm 2018 lúc 22:47Jun 27, 2018 at 22:47

blhsingblhsingblhsing

83.1k6 Huy hiệu vàng65 Huy hiệu bạc95 Huy hiệu Đồng6 gold badges65 silver badges95 bronze badges

Python sẽ kiểm tra dòng thứ nhất hoặc thứ hai để biết thông số kỹ thuật mã hóa giống như Emacs/VIM.

Nội phân Chính showShow

  • Ký tự thoát
  • Làm thế nào để bạn sử dụng các ký tự đặc biệt trong Python?
  • Làm thế nào để bạn tránh các nhân vật đặc biệt trong Python?
  • Chúng ta có thể sử dụng các ký tự đặc biệt trong Python không?
  • Làm cách nào để ngăn các nhân vật thoát khỏi Python?

Để bỏ qua các chuỗi thoát trong chuỗi, chúng tôi tạo chuỗi thành "chuỗi thô" bằng cách đặt "r" trước chuỗi. "Chuỗi thô" in khi nó được gán cho chuỗi. Python | Làm thế nào để in dấu ngoặc kép với biến chuỗi?the first or second line must match the regular expression "coding[:=]\s*([-\w.]+)". The first group of this expression is then interpreted as encoding name. If the encoding is unknown to Python, an error is raised during compilation.

Python sẽ kiểm tra dòng thứ nhất hoặc thứ hai để biết thông số kỹ thuật mã hóa giống như Emacs/VIM.

Nội phân Chính show

Ký tự thoát

# -*- encoding: utf-8 -*-
special_char_string = u"äöüáèô"

Chính xác hơn, dòng thứ nhất hoặc thứ hai phải khớp với biểu thức chính quy "mã hóa [: =] \ s*([-\ w.]+)". Nhóm đầu tiên của biểu thức này sau đó được hiểu là tên mã hóa. Nếu mã hóa không được biết đến Python, một lỗi được nêu ra trong quá trình biên dịch.

>>> u"äöüáèô" == "äöüáèô".decode('utf8')
True

Nguồn: PEP 263

>>> u"äöüáèô".encode('utf8')
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'
>>> "äöüáèô"
'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\xa1\xc3\xa8\xc3\xb4'

(Một BOM cũng sẽ làm cho Python giải thích nguồn là UTF-8.


Ký tự thoát

Chính xác hơn, dòng thứ nhất hoặc thứ hai phải khớp với biểu thức chính quy "mã hóa [: =] \ s*([-\ w.]+)". Nhóm đầu tiên của biểu thức này sau đó được hiểu là tên mã hóa. Nếu mã hóa không được biết đến Python, một lỗi được nêu ra trong quá trình biên dịch.

Nguồn: PEP 263

(Một BOM cũng sẽ làm cho Python giải thích nguồn là UTF-8.

Tôi muốn giới thiệu, bạn sử dụng cái này trên .decode('utf8')

Trong mọi trường hợp,

import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
0 sau đó sẽ chứa một đối tượng
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
1, không còn là
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
2. Như bạn có thể thấy, cả hai đều tương đương về mặt ngữ nghĩa:

Và điều ngược lại:

Tuy nhiên, có một sự khác biệt về kỹ thuật: nếu bạn sử dụng U "thứ gì đó", nó sẽ hướng dẫn trình phân tích cú pháp rằng có một bản theo nghĩa đen của Unicode, nó sẽ nhanh hơn một chút.

Để chèn các ký tự là bất hợp pháp trong một chuỗi, hãy sử dụng một ký tự thoát.

Tôi muốn giới thiệu, bạn sử dụng cái này trên .decode('utf8')

Trong mọi trường hợp,

import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
0 sau đó sẽ chứa một đối tượng
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
1, không còn là
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
2. Như bạn có thể thấy, cả hai đều tương đương về mặt ngữ nghĩa:

Và điều ngược lại:

Tuy nhiên, có một sự khác biệt về kỹ thuật: nếu bạn sử dụng U "thứ gì đó", nó sẽ hướng dẫn trình phân tích cú pháp rằng có một bản theo nghĩa đen của Unicode, nó sẽ nhanh hơn một chút.

Để chèn các ký tự là bất hợp pháp trong một chuỗi, hãy sử dụng một ký tự thoát.

Một nhân vật thoát là một dấu gạch chéo ngược
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
3 theo sau là nhân vật bạn muốn chèn.
Một ví dụ về một ký tự bất hợp pháp là một trích dẫn kép bên trong một chuỗi được bao quanh bởi các trích dẫn kép:Thí dụ
Bạn sẽ gặp lỗi nếu bạn sử dụng dấu ngoặc kép bên trong một chuỗi được bao quanh bởi các trích dẫn kép: txt = "Chúng tôi là người được gọi là" người Viking "từ phía bắc."Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:
TXT = "Chúng tôi là người được gọi là \" Vikings \ "từ phía bắc."Các nhân vật thoát khác được sử dụng trong Python:Hãy tự mình thử »
Để khắc phục sự cố này, hãy sử dụng ký tự thoát
import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:
Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:Hãy tự mình thử »


Để khắc phục sự cố này, hãy sử dụng ký tự thoát

import re
clean_string = re.sub(r'[\x00-\x1f]+', '', string_with_control_characters)
4:

Nhân vật thoát cho phép bạn sử dụng trích dẫn kép khi bạn thường không được phép:

TXT = "Chúng tôi là người được gọi là \" Vikings \ "từ phía bắc."

Các nhân vật thoát khác được sử dụng trong Python:

strs = ["hell°", "hello", "tromsø", "boy", "stävänger", "ölut", "world"]

Nếu bạn đã đạt được thử thách tương tự, hãy đọc cho giải pháp.

Các chuỗi có các ký tự có dấu hoặc đặc biệt là các chuỗi Unicode trong khi một ASCII thường xuyên. Vì vậy, để xử lý các chuỗi unicode là chuỗi ASCII thông thường, người ta phải chuyển đổi chuỗi Unicode thành ASCII. (Đối với một lịch sử trên Unicode, hãy đọc một bài viết chi tiết)

Để chuyển đổi Unicode thành ASCII; Người ta phải mã hóa chuỗi Unicode thành UTF-8utf-8

Đây là cách bạn làm trong Python

text = text.encode(‘utf-8’)

Đơn giản là nó !!

Nhưng chờ bạn cần phải loại bỏ các ký tự thoát bổ sung để thực hiện các hoạt động chuỗi. Đây là cách bạn có thể loại bỏ những thứ đó

import redef extract_word(text):
print "Input Text::{}".format(text)
regex = r"(\w|\s)*"
matches = re.finditer(regex, text, re.DOTALL)
newstr = ''
for matchNum, match in enumerate(matches):
matchNum = matchNum + 1
newstr = newstr + match.group()
print "Output Text::{}".format(newstr)
return newstr

Với chuỗi được trả về, bây giờ bạn tốt để đi và thực hiện các hoạt động chuỗi khác trên mảng.

(Nếu điều này đã giúp các bạn, hãy cho tôi biết trong phần bình luận…)

Làm thế nào để bạn sử dụng các ký tự đặc biệt 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.the backslash "\" is a special character, also called the "escape" character. It is used in representing certain whitespace characters: "\t" is a tab, "\n" is a newline, and "\r" is a carriage return. Conversely, prefixing a special character with "\" turns it into an ordinary character.

Làm thế nào để bạn tránh các nhân vật đặc biệt trong Python?

Sử dụng 're ...

Mùi [^a-za-z0 ....

Tất cả các ký tự được khớp sẽ được thay thế bằng một chuỗi trống ..

Tất cả các ký tự ngoại trừ bảng chữ cái và số được xóa ..

Chúng ta có thể sử dụng các ký tự đặc biệt trong Python không?

Python3. Một định danh trong Python không thể sử dụng bất kỳ biểu tượng đặc biệt nào như!, @, #, $, %, V.v.cannot use any special symbols like !, @, #, $, % etc.

Làm cách nào để ngăn các nhân vật thoát khỏi Python?

Để bỏ qua các chuỗi thoát trong chuỗi, chúng tôi tạo chuỗi thành "chuỗi thô" bằng cách đặt "r" trước chuỗi. "Chuỗi thô" in khi nó được gán cho chuỗi. Python | Làm thế nào để in dấu ngoặc kép với biến chuỗi?make the string as "raw string" by placing "r" before the string. "raw string" prints as it assigned to the string. Python | How to print double quotes with the string variable?