2015-11-03 97 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