2015-11-03 96 views
0

段落分隔各行我有一個包含以下段落文本文件:Python的 - 從一個文本文件

以上with語句將自動關閉該文件的代碼嵌套塊後。上面的語句會在嵌套的代碼塊後自動關閉文件。上面的語句會在嵌套的代碼塊後自動關閉文件。
上面的語句會自動關閉沒有嵌套的代碼塊之後的文件。現在

,我想通過該段各條線分開來修改文件,並在同一個文本文件保存爲以下幾點:

以上with語句將自動關閉該文件嵌套後代碼塊。
上面的語句會在嵌套的代碼塊後自動關閉文件。
上面的語句會在嵌套的代碼塊後自動關閉文件。
上面的語句會自動關閉沒有嵌套的代碼塊之後的文件。

我能夠做到這一點,但它有點複雜。我的代碼如下:

試-1

file = open("file_path") 
content = file.read() 
file.close() 
file = open("file_path", 'w') 
a = content.replace('. ', '.\n') 
file.write(a) 
file.close() 

試-2

file = open("file_path") 
contents = file.readlines() 
file.close() 
b = [] 
for line in contents: 
    if not line.strip(): 
     continue 
    else: 
     b.append(line) 
b = "".join(b) 
file = open("file_path", 'w') 
file.write(b) 
file.close() 

我打開文件兩次讀取和兩次寫,有沒有更好的從文本文件中將行與段落分開並將其寫入同一文本文件的方法?

回答

0

您可以使用文件的seek方法在當前文件跳:

f.seek(offset, from_what) 

如果你想使用的文件進行寫入和讀取使用選件R +:

file = open("file_path", 'r+') 

您也可以跳過使用readlines並使用文件迭代。代碼應該是:

file = open("file_path", "r+") 
content = file.read() 
a = content.replace('. ', '.\n') 
file.seek(0) 
file.write(a) 

file.seek(0) 

b = [] 
for line in file: 
    if not line.strip(): 
     continue 
    else: 
     b.append(line) 
b = "".join(b) 
file.seek(0) 
file.write(b) 
file.close() 
2

你可以這樣做:

with open('filepath', 'r') as contents, open('filepath', 'w') as file: 
    contents = contents.read() 
    lines = contents.split('. ') 
    for index, line in enumerate(lines): 
     if index != len(lines) - 1: 
      file.write(line + '.\n') 
     else: 
      file.write(line + '.') 
+0

它是工作,但還有最後一句前的空行。有沒有辦法刪除空行? – Jeril

+0

我編輯了答案以避免該問題。 – arodriguezdonaire

+0

感謝您的回覆......但仍然保持一致。這是我得到的內容contents.split('。'):'''['上面的語句會在嵌套的代碼塊後自動關閉文件','上面的語句會自動關閉文件後嵌套的代碼塊','上面的語句會自動關閉文件嵌套的代碼','\ n上面的\ n上面的語句會自動關閉文件嵌套的代碼塊之後沒有。']'''有是最後一句之前的\ n。有沒有辦法以pythonic的方式刪除\ n? – Jeril