Làm thế nào để bạn xử lý một dấu gạch chéo trong python?


Lê 08/06/2014 18. 36, Isaac Schwabacher a écrit.
>>
>> Nếu gặp phải một liên kết tượng trưng trong quá trình phân giải tên đường dẫn,
>> hành vi sẽ phụ thuộc vào việc liệu . Nếu tất cả
>> end of the pathname and on the function being performed. If all of
>> những điều sau đây là đúng thì quá trình phân giải tên đường dẫn đã hoàn tất.
>>
>> 1. Đây là thành phần tên đường dẫn cuối cùng của tên đường dẫn. 2. Tên
>> đường dẫn không có dấu. 3. Hàm bắt buộc phải
>> tác động lên chính liên kết tượng trưng hoặc một số đối số nhất định chỉ đạo rằng
>> hàm tác động lên chính liên kết tượng trưng.
>>
>> Trong tất cả các trường hợp khác, hệ thống sẽ thêm tiền tố vào tên đường dẫn còn lại,
>> nếu có, với . [. ]

Vì vậy, trường hợp duy nhất mà điều này sẽ tạo ra sự khác biệt là khi gọi một
"hàm hoạt động trên chính liên kết tượng trưng" (chẳng hạn như lstat() hoặc
unlink()) on a path with a trailing slash:

>>> hệ điều hành. lstat('foo')
os. stat_result(st_mode=41471, st_ino=1981954, st_dev=2050, st_nlink=1,
st_uid=1000, st_gid=1000, st_size=4, st_atime=1407370025,
st_mtime=1407370025, st_ctime=1407370025)
>>> os.lstat('foo/')
os. stat_result(st_mode=17407, st_ino=917505, st_dev=2050, st_nlink=7,
st_uid=0, st_gid=0, st_size=4096, st_atime=1407367916,
st_mtime=1407369857, st_ctime=1407369857)

>>> đường dẫn. Đường dẫn ('foo'). lstat()
os. stat_result(st_mode=41471, st_ino=1981954, st_dev=2050, st_nlink=1,
st_uid=1000, st_gid=1000, st_size=4, st_atime=1407370037,
st_mtime=1407370025, st_ctime=1407370025)
>>> pathlib.Path('foo/').lstat()
os. stat_result(st_mode=41471, st_ino=1981954, st_dev=2050, st_nlink=1,
st_uid=1000, st_gid=1000, st_size=4, st_atime=1407370037,
st_mtime=1407370025, st_ctime=1407370025)

Nhưng bạn cũng có thể gọi giải quyết() một cách rõ ràng nếu bạn muốn hành động trên
mục tiêu liên kết thay vì chính liên kết đó.

>>> đường dẫn. Đường dẫn ('foo/'). giải quyết(). lstat()
os. stat_result(st_mode=17407, st_ino=917505, st_dev=2050, st_nlink=7,
st_uid=0, st_gid=0, st_size=4096, st_atime=1407367916,
st_mtime=1407369857, st_ctime=1407369857)

Tôi đang xem xét các trường hợp khác?

Trân trọng

antoine

Như đã nêu trước đó, biểu thức chính quy sử dụng ký tự gạch chéo ngược ("\") để biểu thị các dạng đặc biệt hoặc để cho phép sử dụng các ký tự đặc biệt mà không cần gọi ý nghĩa đặc biệt của chúng. Điều này mâu thuẫn với việc Python sử dụng cùng một ký tự cho cùng một mục đích trong chuỗi ký tự

Giả sử bạn muốn viết RE khớp với chuỗi "\ section" có thể tìm thấy trong tệp LATEX. Để tìm ra những gì cần viết trong mã chương trình, hãy bắt đầu với chuỗi mong muốn được khớp. Tiếp theo, bạn phải thoát khỏi mọi dấu gạch chéo ngược và các siêu ký tự khác bằng cách đặt trước chúng bằng dấu gạch chéo ngược, dẫn đến chuỗi "\\section". Chuỗi kết quả phải được chuyển tới re. compile() phải là

Hello, World

2. Tuy nhiên, để thể hiện điều này dưới dạng chuỗi ký tự Python, cả hai dấu gạch chéo ngược phải được thoát lại

CharactersStage

Hello, World

3Chuỗi văn bản được so khớp

Hello, World

2Dấu gạch chéo ngược thoát cho re. biên dịch

Hello, World

5 Dấu gạch chéo ngược đã thoát cho một chuỗi ký tự

Nói tóm lại, để khớp với dấu gạch chéo ngược theo nghĩa đen, người ta phải viết '\\\\' dưới dạng chuỗi RE, vì biểu thức chính quy phải là "\\" và mỗi dấu gạch chéo ngược phải được biểu thị là "\\" bên trong Python thông thường . Trong các RE có dấu gạch chéo ngược lặp đi lặp lại, điều này dẫn đến nhiều dấu gạch chéo ngược lặp đi lặp lại khiến chuỗi kết quả trở nên khó hiểu

Giải pháp là sử dụng ký hiệu chuỗi thô của Python cho các biểu thức chính quy; . Các biểu thức chính quy thông thường sẽ được thể hiện bằng mã Python bằng cách sử dụng ký hiệu chuỗi thô này

bạn có ý tưởng đúng – trong ký tự chuỗi python, dấu gạch chéo là một lối thoát, vì vậy “\n” là một dòng mới

Để gỡ lỗi này, hãy thử đặt tên tệp trước rồi in nó

In [15]: filename = "C:\Coursea\TwitterSen\negative_words.txt"

In [16]: print(filename)
C:\Coursea\TwitterSen
egative_words.txt

Vì vậy, đường dẫn Windows là một thách thức

“Cách đúng đắn” để xử lý các đường dẫn tệp là sử dụng thư viện – ví dụ, hãy xem mô-đun pathlib

Nhưng cách nhanh và bẩn là sử dụng chuỗi "thô"

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt

Chữ 'r' phía trước dấu ngoặc kép có nghĩa là "chuỗi thô", có nghĩa là không hiểu dấu gạch chéo là dấu gạch chéo, chỉ cần giữ nguyên như vậy

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về ký tự dấu gạch chéo ngược trong Python như một phần của ký tự thứ tự đặc biệt hoặc để thoát ký tự trong chuỗi

Giới thiệu về dấu gạch chéo ngược Python

Trong Python, dấu gạch chéo ngược(

Hello, World

1) là một ký tự đặc biệt. Nếu bạn sử dụng dấu gạch chéo ngược trước một ký tự khác, nó sẽ thay đổi ý nghĩa của ký tự đó

Ví dụ,

Hello, World

2 là một ký tự chữ. Nhưng nếu bạn sử dụng ký tự gạch chéo ngược ở phía trước chữ cái

Hello, World

2, nó sẽ trở thành ký tự tab (

Hello, World

4)

Nói chung, dấu gạch chéo ngược có hai mục đích chính

Đầu tiên, ký tự gạch chéo ngược là một phần của chuỗi ký tự đặc biệt, chẳng hạn như ký tự tab

Hello, World

4 hoặc ký tự dòng mới

Hello, World

6

Ví dụ sau in một chuỗi có ký tự xuống dòng

________số 8

đầu ra

Hello, World

\n là một ký tự đơn, không phải hai ký tự. Ví dụ

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
0

Thứ hai, dấu gạch chéo ngược (

Hello, World

1) thoát khỏi các ký tự đặc biệt khác. Ví dụ: nếu bạn có một chuỗi có một trích dẫn bên trong một chuỗi trích dẫn đơn như chuỗi sau, bạn cần sử dụng dấu gạch chéo ngược để thoát khỏi ký tự trích dẫn đơn

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
2

đầu ra

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
3

Dấu gạch chéo ngược trong chuỗi f

PEP-498 chỉ định rằng chuỗi f không thể chứa ký tự dấu gạch chéo ngược như một phần của biểu thức bên trong dấu ngoặc nhọn

Hello, World

8

Ví dụ sau sẽ dẫn đến lỗi

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
5

Lỗi

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
6

Để khắc phục điều này, bạn cần nối các chuỗi trong danh sách

Hello, World

9 trước khi đặt chúng vào dấu ngoặc nhọn

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
8

đầu ra

In [13]: filename = r"C:\Coursea\TwitterSen\negative_words.txt"

In [14]: print(filename)
C:\Coursea\TwitterSen\negative_words.txt
9

Dấu gạch chéo ngược trong chuỗi thô

Các chuỗi thô coi ký tự dấu gạch chéo ngược (_______21) là ký tự chữ. Ví dụ sau coi ký tự gạch chéo ngược

Hello, World

1 là ký tự chữ, không phải ký tự đặc biệt