如果一行以逗号开头,我想删除前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
答案 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)