2013-11-04 64 views
4

我已閱讀file.readlines()逐行讀取整個文件並將其存儲在列表中。 如果我有像這樣一個文件 -file.readlines()留空行

Sentence 1 
Sentence 2 
Sentence 3 

我用.readlines()打印每一句話,像這樣 -

file = open("test.txt") 
for i in file.readlines(): 
    print i 
    enter code here 

輸出是

Sentence 1 

Sentence 2 

Sentence 3 

我的問題是,爲什麼我在每句話之間多加一行,我怎樣才能擺脫它? 請原諒,如果這個問題很愚蠢,但我不是很有經驗的Python。

UPDATE

我發現,使用i.strip()也消除了多餘的線條,爲什麼會出現這種情況?據我所知,.split()刪除字符串末尾和開頭的空格。

回答

7

file.readlines()返回字符串列表。每個字符串都包含尾隨換行符。 print語句用newlnie打印傳遞的參數。這就是爲什麼你有額外的線路。

要刪除多餘的換行符,使用str.rstrip

print i.rstrip('\n') 

或使用sys.stdout.write

sys.stdout.write(i) 

BTW,除非你需要的所有行一次不使用file.readlines。只需迭代文件即可。

with open("test.txt") as f: 
    for i in f: 
     print i.rstrip('\n') 
     ... 

UPDATE

在Python 3,防止print打印換行符,您可以使用print(i, end='')

在Python 2,你可以使用相同的功能,如果你這樣做:from __future__ import print_function

答到UPDATE

製表符,換行符也考慮爲空格。

>> ' \r\n\t\v'.isspace() 
True 
+0

...然後你的打印命令添加了第二個換行符 –

+0

rstrip(「\ n」)''就足夠了,因爲文件在文本模式下打開了。 –

+0

@TimPietzcker,你說得對。我根據你的評論編輯了答案。謝謝。 – falsetru

1
file.readlines() 

(和也file.readline())包括換行。

print i.replace('\n', '') 

,如果你不希望他們。

將換行符包含在行的末尾看起來很奇怪,但是這允許例如您判斷最後一行是否具有換行符。這種情況在許多語言的I/O中很棘手。

1

以下內容將爲您刪除換行符。

i = i.rstrip("\n") #strips newline 

希望這會有所幫助。