2013-08-22 106 views
9

Tôi muốn thêm một số ký tự vào đầu mỗi dòng.Thêm một số ký tự ở đầu mỗi dòng

Tôi làm cách nào?

tôi đã làm điều đó:

'\n\t\t\t'.join(myStr.splitlines())

Nhưng nó không phải là hoàn hảo và tôi muốn biết nếu có những cách tốt hơn để làm điều đó. Ban đầu tôi muốn thụt lề toàn bộ khối văn bản một cách tự động.

Trả lời

8

Tôi nghĩ đó là một phương pháp khá hay. Một điều bạn có thể cải thiện là phương pháp của bạn giới thiệu một dòng mới hàng đầu và loại bỏ bất kỳ dòng mới nào. Đây sẽ không:

'\t\t\t'.join(myStr.splitlines(True)) 

From the docs:

str.splitlines ([keepends])

Return một danh sách các dòng trong chuỗi, vi phạm tại chỉ giới đường. Phương pháp này sử dụng các dòng mới phổ dụng cách tiếp cận để tách các đường kẻ. Ngắt dòng không được bao gồm trong danh sách kết quả trừ khi tuân thủ được đưa ra và đúng sự thật.

Ngoài ra, trừ khi chuỗi của bạn bắt đầu bằng một dòng mới, bạn không phải thêm bất kỳ tab ở đầu của chuỗi, vì vậy bạn có thể muốn làm điều này quá:

'\t\t\t'.join(('\n'+myStr.lstrip()).splitlines(True)) 
+0

Tôi đã không biết rằng, cảm ơn! – JeromeJ

1

Đối với linh hoạt tùy chọn, bạn có thể muốn xem textwrap trong thư viện chuẩn.

Ví dụ:

>>> hamlet='''\ 
... To be, or not to be: that is the question: 
... Whether 'tis nobler in the mind to suffer 
... The slings and arrows of outrageous fortune, 
... Or to take arms against a sea of troubles, 
... And by opposing end them? To die: to sleep; 
... No more; and by a sleep to say we end 
... ''' 
>>> import textwrap 
>>> wrapper=textwrap.TextWrapper(initial_indent='\t', subsequent_indent='\t'*2) 
>>> print wrapper.fill(hamlet) 
    To be, or not to be: that is the question: Whether 'tis nobler in the 
     mind to suffer The slings and arrows of outrageous fortune, Or to 
     take arms against a sea of troubles, And by opposing end them? To 
     die: to sleep; No more; and by a sleep to say we end 

Bạn có thể thấy rằng bạn có thể không chỉ dễ dàng thêm không gian linh hoạt trên mặt trước của mỗi dòng, bạn có thể cắt mỗi dòng để phù hợp với, làm dấu ngang giữa hai chữ, mở rộng các tab vv

Nó sẽ quấn (do đó tên) dòng trở nên quá dài vì các bổ sung ở phía trước:

>>> wrapper=textwrap.TextWrapper(initial_indent='\t'*3, 
... subsequent_indent='\t'*4, width=40) 
>>> print wrapper.fill(hamlet) 
      To be, or not to be: that is the 
       question: Whether 'tis nobler in the 
       mind to suffer The slings and arrows 
       of outrageous fortune, Or to take 
       arms against a sea of troubles, And 
       by opposing end them? To die: to 
       sleep; No more; and by a sleep to 
       say we end 

Rất linh hoạt và hữu ích.

Sửa

Nếu bạn muốn giữ lại ý nghĩa của kết thúc dòng trong văn bản với textwrap, chỉ cần kết hợp với textwrap splitlines để giữ dòng kết thúc giống nhau.

Ví dụ về treo thụt lề:

import textwrap 

hamlet='''\ 
Hamlet: In the secret parts of Fortune? O, most true! She is a strumpet. What's the news? 
Rosencrantz: None, my lord, but that the world's grown honest. 
Hamlet: Then is doomsday near.''' 

wrapper=textwrap.TextWrapper(initial_indent='\t'*1, 
          subsequent_indent='\t'*3, 
          width=30) 

for para in hamlet.splitlines(): 
    print wrapper.fill(para) 
    print 

in

Hamlet: In the secret parts 
     of Fortune? O, most true! 
     She is a strumpet. What's 
     the news? 

Rosencrantz: None, my lord, 
     but that the world's grown 
     honest. 

Hamlet: Then is doomsday 
     near. 
+0

Có thể, bằng cách nào đó, chúng ta có thể giữ phân tách kiểu dòng mới (\ n, \ r \ n hoặc \ r, nếu tôi đúng) như 'str.splitlines (True)' không?Tôi sẽ có một cái nhìn gần hơn với mô-đun này nhưng điều này có vẻ gọn gàng! – JeromeJ

+0

(… (2) hoặc có lẽ điều này hoàn toàn vô dụng và tôi chỉ nên sử dụng "\ n" ở mọi nơi?) – JeromeJ

+0

@JeromeJ: Tại sao bạn nói vô dụng? Đó là [không tầm thường chút nào] (http://hg.python.org/cpython/file/2.7/Lib/textwrap.py) những gì textwrap đang làm. Hãy suy nghĩ về quấn từ trong một trình xử lý văn bản. Nếu bạn thêm 3 tab vào trước dòng của mình, điều gì xảy ra khi dòng quá dài để hiển thị trong không gian đã cho? Thư viện này cho phép bạn thêm không gian ở đầu mỗi dòng và bọc tất cả các dòng còn lại nếu không gian đó làm cho đường quá rộng. Làm thế nào là vô ích? – dawg

Các vấn đề liên quan