找到匹配时仅从前 3 行中删除 '\n'

Strip '\n' only from previous 3 lines when match found

如果一行以逗号开头,我想删除前 3 行的换行符。我从 txt 文件中读取了我的台词。 我能够找到我想从中删除 \n 的行,但不幸的是我的代码删除了所有新行......我很乐意提供一些帮助我的代码有什么问题。

 with open(in_file9, 'r', encoding='utf-8') as fin, open(out_file10, 'w', encoding='utf-8') as fout:
            lines = fin.read().splitlines()
            count = 0
            for i, line in enumerate(lines):
                count = count + 1
                if line.startswith(','):
                    print (lines[i - 1])
                    lines[i - 1].strip('\n')
                    lines[i - 2].strip('\n')
                    lines[i - 3].strip('\n')

                fout.write(line)

编辑: 这是一个带图片的例子,因为这里写的时候看起来不对,但是图片显示了。

*在*

6.30.230。 STLB-Bau:11/2017 068 一些文字,对称,DIN FFF 1234 (VDE

1.850 ,000 米

6.30.220。 STLB-Bau:10/2015 123 一些其他文本,对称性,DIN FFF 6789 (VDE 950,000 m

Out(我有什么)

6.30.230。 STLB-Bau:11/2017 068 一些文字,对称,DIN FFF 1234 (VDE 1.850 ,000 m 6.30.220。STLB-Bau:10/2015 123 一些其他文字,对称,DIN FFF 6789 (VDE 950,000 m

出(我想要的):

6.30.230。 STLB-Bau:11/2017 068 一些文字,对称,DIN FFF 1234 (VDE 1.850,000 m

6.30.220。 STLB-Bau:10/2015 123 一些其他文本,对称性,DIN FFF 6789 (VDE 950,000 m

换行符实际上被 splitlines() 删除,因为您没有提供 keepends 参数。但是,除了 fin.read().splitlines(keepends=True),您还可以 fin.readlines().

问题的下一部分是您在检查逗号时将行写入文件,所以当您看到要查找的逗号时,已经来不及更改了前几行。相反,首先修改所有行,然后将所有内容写入文件。

最后,我会注意到 lines[i - 1].strip('\n') 实际上并没有修改 lines[i - 1]。它只是 returns 行的修改版本,但您仍然需要将其分配回来。

解决您代码中的这些问题,这似乎可以满足您的要求:

with open(in_file9, 'r', encoding='utf-8') as fin, open(out_file10, 'w', encoding='utf-8') as fout:
    lines = fin.readlines()
    for i, line in enumerate(lines):
        if line.startswith(','):
            lines[i - 1] = lines[i - 1].strip('\n')
            lines[i - 2] = lines[i - 2].strip('\n')
            lines[i - 3] = lines[i - 3].strip('\n')
    fout.write(''.join(lines))

综上所述,如果您的问题可以概括为 "if a line starts with a comma, connect it to the last non-blank line",这里有一个使用正则表达式的更短、更灵活的解决方案:

from re import sub, MULTILINE

with open(in_file9, 'r', encoding='utf-8') as fin, open(out_file10, 'w', encoding='utf-8') as fout:
    lines = fin.read()
    lines = sub(r'\s+^(?=,)', '', lines, flags=MULTILINE)
    fout.write(lines)