Backslash kép không sai, Python đại diện cho nó theo cách cho người dùng. Trong mỗi dấu gạch chéo ngược đôi
>>> print[a]
raw s\tring
>>> print[b]
raw s\tring
4, người đầu tiên thoát khỏi lần thứ hai để ngụ ý một dấu gạch chéo ngược thực tế. Nếu >>> print[a]
raw s\tring
>>> print[b]
raw s\tring
5 và >>> print[a]
raw s\tring
>>> print[b]
raw s\tring
6 [không 'R' và chém đôi rõ ràng] thì cả hai đều được đại diện là >>> print[a]
raw s\tring
>>> print[b]
raw s\tring
7.>>> a = r'raw s\tring'
>>> b = 'raw s\\tring'
>>> a
'raw s\\tring'
>>> b
'raw s\\tring'
Để làm rõ, khi bạn in chuỗi, bạn sẽ thấy nó như nó sẽ được sử dụng, giống như trong một đường dẫn - chỉ với một dấu gạch chéo ngược:
>>> print[a]
raw s\tring
>>> print[b]
raw s\tring
Và trong trường hợp chuỗi in này,
>>> print[a]
raw s\tring
>>> print[b]
raw s\tring
8 không ngụ ý một tab, đó là một dấu gạch chéo ngược >>> print[a]
raw s\tring
>>> print[b]
raw s\tring
9 theo sau là chữ 't'.Mặt khác, một chuỗi không có tiền tố 'r' và một dấu gạch chéo ngược sẽ thoát khỏi ký tự sau nó, khiến nó đánh giá 'T' theo nó == tab:
>>> t = 'not raw s\tring' # here '\t' = tab
>>> t
'not raw s\tring'
>>> print[t] # will print a tab [and no letter 't' in 's\tring']
not raw s ring
Vì vậy, trong đường dẫn PDF+Tên:
>>> item = 'xyz'
>>> PDF = r'C:\Users\user\Desktop\File_%s.pdf' % item
>>> PDF # the representation of the string, also in error messages
'C:\\Users\\user\\Desktop\\File_xyz.pdf'
>>> print[PDF] # "as used"
C:\Users\user\Desktop\File_xyz.pdf
Thông tin thêm về trình tự thoát trong bảng ở đây. Cũng xem
>>> t = 'not raw s\tring' # here '\t' = tab
>>> t
'not raw s\tring'
>>> print[t] # will print a tab [and no letter 't' in 's\tring']
not raw s ring
0 so với >>> t = 'not raw s\tring' # here '\t' = tab
>>> t
'not raw s\tring'
>>> print[t] # will print a tab [and no letter 't' in 's\tring']
not raw s ring
1. Ngày 24 tháng 7 năm 2018. Bởi reuven. By Reuven
filename = 'c:\abc\def\ghi.txt'
Nhưng khi các sinh viên của tôi cố gắng mở tệp, họ phát hiện ra rằng Python cho họ một lỗi, cho biết rằng tệp không tồn tại! & NBSP; Nói cách khác, họ viết:
for one_line in open[filename]: print[one_line]
Vấn đề gì? & NBSP; Điều này có vẻ như Python khá tiêu chuẩn, không?
Hãy nhớ rằng các chuỗi trong Python thường chứa các ký tự. Những nhân vật đó thường có thể in được, nhưng có những lúc bạn muốn bao gồm một nhân vật không thực sự có thể in được, chẳng hạn như một dòng mới. & NBSP; Trong những trường hợp đó, Python [giống như nhiều ngôn ngữ lập trình] bao gồm các mã đặc biệt sẽ chèn ký tự đặc biệt.
Ví dụ nổi tiếng nhất là Newline, AKA ‘\ n, hoặc ASCII 10. Nếu bạn muốn chèn một dòng mới vào chuỗi Python của mình, thì bạn có thể làm như vậy với‘ \ n, ở giữa. & NBSP; Ví dụ:
s = 'abc\ndef\nghi'
Khi chúng tôi in chuỗi, chúng tôi sẽ thấy:
>>> print[s] abc def ghi
Điều gì sẽ xảy ra nếu bạn muốn in một nghĩa đen ‘\ n, trong mã của bạn? Đó là, bạn muốn một dấu gạch chéo ngược, theo sau là một N N NBSP; Sau đó, bạn sẽ cần phải tăng gấp đôi dấu gạch chéo ngược: \ \ 'trong một chuỗi sẽ dẫn đến một ký tự dấu gạch chéo ngược. Sau đó, các N N N sẽ bình thường. Ví dụ:
s = 'abc\\ndef\\nghi'
Khi chúng ta nói:
>>> print[s] abc\ndef\nghi
Nó rất nổi tiếng rằng bạn phải bảo vệ chống lại bản dịch này khi bạn làm việc với \ n. Nhưng những nhân vật khác yêu cầu nó? Hóa ra, nhiều người có thể mong đợi:
- \ A - chuông báo thức [ASCII 7]
- \ B - Backspace [ASCII
- \ f - nguồn cấp dữ liệu hình thức
- \ n - Newline
- \ r - Trở lại vận chuyển
- \ t - tab
- \ V - tab dọc
- \ ooo - & nbsp; Nhân vật có giá trị bát phân ooo
- \ XHH - Nhân vật có giá trị hex HH
- \ N {name} - ký tự unicode {name}
- \ uxxxx-ký tự unicode với giá trị hex 16 bit xxxx
- \ Uxxxxxxxxx-ký tự unicode với giá trị hex 32 bit xxxxxxxxx
Theo kinh nghiệm của tôi, bạn rất khó sử dụng một số trong số này. Ý tôi là, lần cuối cùng bạn cần sử dụng ký tự thức ăn mẫu là khi nào? Hoặc một tab dọc? & Nbsp; Tôi biết - đó là cùng ngày mà bạn lái con khủng long của bạn để làm việc, sau khi đào một cái giếng trong sân sau của bạn để uống nước.
Nhưng gần như mỗi khi tôi dạy Python - đó là, mỗi ngày - một người nào đó trong lớp của tôi va vào một trong những nhân vật này do nhầm lẫn. Điều đó bởi vì sự kết hợp của các dấu gạch chéo ngược được sử dụng bởi các nhân vật này và các dấu gạch chéo ngược được sử dụng trong các đường dẫn Windows làm cho các lỗi không thể tránh khỏi và bực bội.
Hãy nhớ rằng con đường tôi đã đề cập ở đầu bài đăng trên blog, có vẻ rất ngây thơ?
filename = 'c:\abc\def\ghi.txt'
Nó chứa một nhân vật \ a \ a. Có nghĩa là khi chúng ta in nó:
>>> print[a]
raw s\tring
>>> print[b]
raw s\tring
1Nhìn thấy? Các \ \ A đã biến mất, được thay thế bằng một ký tự chuông báo thức. Nếu bạn may mắn.
Vậy chúng ta có thể làm gì? Nhân đôi các dấu gạch chéo ngược, tất nhiên. Bạn chỉ cần tăng gấp đôi những thứ sẽ được biến thành các ký tự đặc biệt, từ bảng tôi đã sao chép ở trên: Nhưng thôi nào, bạn thực sự có khả năng nhớ rằng \ \ fiêu là đặc biệt, nhưng ; Chắc là không.
Vì vậy, quy tắc chung của tôi, và những gì tôi nói với các sinh viên của mình, là chúng phải luôn gấp đôi các dấu gạch chéo ngược trong đường dẫn Windows của họ. Nói cách khác:
>>> print[a]
raw s\tring
>>> print[b]
raw s\tring
2Nó hoạt động!
Nhưng chờ đã: Không ai muốn thực sự lội qua các tên đường dẫn của họ, nhân đôi mọi dấu gạch chéo ngược, phải không? & NBSP; Dĩ nhiên là không.
Đó là nơi mà các chuỗi thô của Python có thể giúp ích. Tôi nghĩ về các chuỗi thô theo hai cách khác nhau:
- Những gì bạn-xem-là-What-What-You-Get String
- Tự động tăng gấp đôi các dấu gạch chéo trong chuỗi
Dù bằng cách nào, hiệu ứng là như nhau: tất cả các dấu gạch chéo ngược được nhân đôi, vì vậy tất cả những nhân vật đặc biệt đáng sợ và kỳ lạ này đều biến mất. & NBSP; Điều đó thật tuyệt khi bạn làm việc với các đường dẫn Windows.
Tất cả những gì bạn cần làm là đặt một bản R R R trước khi trích dẫn mở đầu [đơn hoặc đôi]:
>>> print[a]
raw s\tring
>>> print[b]
raw s\tring
3Lưu ý rằng một chuỗi RAW RAW là một loại chuỗi khác nhau. Nó chỉ là một cách khác để nhập một chuỗi vào Python. & NBSP; Nếu bạn kiểm tra, gõ [tên tệp] vẫn sẽ là Str Str, nhưng tất cả các dấu gạch chéo của nó sẽ được nhân đôi.
Điểm mấu chốt: Nếu bạn sử dụng Windows, thì bạn chỉ nên viết tất cả các chuỗi đường dẫn được mã hóa cứng của mình dưới dạng chuỗi thô. & NBSP; Ngay cả khi bạn là một chuyên gia Python, tôi có thể nói với bạn từ kinh nghiệm rằng đôi khi bạn sẽ chống lại vấn đề này. Và ngay cả đối với những người giỏi nhất trong chúng ta, việc phát hiện ra rằng Stray \ Fiêu trong một chuỗi có thể tốn thời gian và bực bội.
Tái bút: Vâng, thật đúng là người dùng Windows có thể hiểu được điều này bằng cách sử dụng các dấu gạch chéo về phía trước, giống như chúng tôi làm mọi người. Nhưng các sinh viên của tôi thấy điều này là đặc biệt kỳ lạ, và vì vậy tôi không thể xem nó như một giải pháp đa năng.
Thích bài viết này? Tham gia cùng hơn 11.000 nhà phát triển khác nhận bản tin của các nhà phát triển tốt hơn, hàng tuần của tôi. Mỗi thứ Hai, bạn sẽ nhận được một bài viết như thế này về phát triển phần mềm và Python: