【问题标题】:Python - separating individual lines in a paragraph from a text filePython - 从文本文件中分离段落中的单行
【发布时间】:2015-11-03 20:00:38
【问题描述】:

我有一个包含以下段落的文本文件:

上面的with语句会在嵌套代码块之后自动关闭文件。上面的 with 语句会在嵌套代码块之后自动关闭文件。上面的 with 语句会在嵌套代码块之后自动关闭文件。
上面的with语句会在没有嵌套代码块之后自动关闭文件。

现在,我想通过分隔段落的各行来修改文件,并将其保存在同一个文本文件中,如下所示:

上面的 with 语句会在嵌套代码块之后自动关闭文件。
上面的 with 语句会在嵌套代码块之后自动关闭文件。
上面的 with 语句会在嵌套代码块之后自动关闭文件。
上面的with语句会在没有嵌套代码块之后自动关闭文件。

我能做到,但有点复杂。我的代码如下:

try-1

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

try-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()

我打开文件两次读取和两次写入,有没有更好的方法将行与文本文件中的段落分开,并将其写入同一个文本文件?

【问题讨论】:

    标签: python


    【解决方案1】:

    你可以这样做:

    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 + '.')
    

    【讨论】:

    • 它正在工作,但最后一句之前有一个空行。有什么办法可以去掉空行吗?
    • 感谢您的回复...但我还是一样。这是我在contents.split('.')之后得到的列表:'''['上面的with语句会在嵌套代码块之后自动关闭文件','上面的with语句会在之后自动关闭文件嵌套代码块', '上面的with语句会自动关闭嵌套代码块之后的文件', '\n上面的with语句会自动关闭没有嵌套代码块之后的文件']''' 还有是最后一句之前的 \n。有没有办法以pythonic方式删除\n?
    • 再次应用相同的算法拆分为 '\n' 而不是 '。 ' 或者找到一个可以得到点、空格和\n的正则表达式,将其用于拆分功能
    【解决方案2】:

    您可以使用文件的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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 2018-05-08
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多