在python中的每个空白行上插入新行字符串

时间:2018-10-27 09:29:26

标签: python

我要完成的工作是在文本文件中的每一行插入新行。

我知道可以使用一个简单的编辑器来完成此操作,但是真正要做的是向每行添加一个增量值。

到目前为止,这是我的代码:

import fileinput
import re

count = 0

for line in fileinput.input():
    line = re.sub('\n\r', '\n\r\n\rmyline' + str(count), line.rstrip())
    count+=1
    print(line)

由于某些原因,我无法用内容替换换行符。也只尝试了/ n或/ r但没有成功

实时示例:

初始文本文件:

line1
line2

line3


morelines

最终结果:

line1
line2
myline1
line3
myline2
myline3
morelines

2 个答案:

答案 0 :(得分:0)

您的代码有几个问题。

  1. 读取文本文件时,Python的默认设置是在输入时将CR LF转换为'\n',因此您的代码将永远不会看到'\r'
  2. Windows上的换行符表示为CR LF(回车+换行),而不是LF CR。如果您应该使用'\r\n',而不是'\n\r'
  3. 除了要查找空行(即连续两个换行符)之外,因此应该是'\n\n'(或'\r\n\r\n')。
  4. 您要转换的字符串为line.rstrip()rstrip会删除所有结尾的空格,包括'\n''\r',因此即使将其更改为'\n',您的正则表达式也不会匹配任何内容。

未经测试:

import fileinput

count = 0
for line in fileinput.input():
    if line.rstrip() == '':
        count += 1
        print('myline' + str(count))
    else:
        print(line, end = '')

答案 1 :(得分:0)

这对我有用

def get_my_line(line_no):
    print("myline {}".format(line_no))


path = 'test.txt'
f = open(path)
i = 0
was_prev_text_new_line = False
for foo in f.readlines():
    if (foo.__eq__("\n")):
        if (was_prev_text_new_line):
            i += 1
            get_my_line(i)
        was_prev_text_new_line = True
    else :
        print(foo.replace("\n", ""))
        was_prev_text_new_line = False
        i += 1
        get_my_line(i)

这里的逻辑是: -> get_my_line是基于var'i'给出/打印要添加/打印的所需行的功能。

->'i'每次调用get_my_line都会增加

-> f.readlines读取每个新行并将其存储在foo中(即它检测到“ \ n”)

->如果foo为'\ n',则表示,我们有一个非文本行。

->此处的方法是在每个语句之后添加新行,并且如果foo仅是'\ n',则检查上一个txt是否为'\ n'(这有助于我们跳过第一个'\在包含文字的行之后添加n”,并为随后的连续“ \ n”添加新行)

->如果was_prev_text_new_line为true,则调用get_my_line并递增i

->在if块的末尾将“ was_prev_text_new_line”设置为true

->如果foo不是('\ n'),则只需打印foo,获取要添加的新行并递增i