找到匹配项后,仅从前三行中删除“ \ n”

时间:2019-01-09 13:23:40

标签: python-3.x strip

如果一行以逗号开头,我想删除前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-鲍:11/2017 068 一些文字,对称,DIN FFF 1234(VDE

1.850 ,000 m

6.30.220。 STLB-鲍: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

退出(我想要的):

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

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

enter image description here

1 个答案:

答案 0 :(得分:1)

由于您未提供keepends参数,因此换行符实际上已被splitlines()删除。但是,您不必执行fin.read().splitlines(keepends=True),而只需执行fin.readlines()

问题的下一部分是,您在检查行中是否有逗号时将其写入文件中,因此,当看到所需的逗号时,更改前一个为时已晚线。相反,请首先修改所有行,然后将所有内容写入文件。

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

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

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

所有这些,如果您的问题可以概括为“如果一行以逗号开头,则将其连接到最后一个非空白行”,这是使用正则表达式的更短,更灵活的解决方案:

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)