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

2024-05-04 22:34:30 发布

您现在位置: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,但没有成功

现场示例:

初始文本文件:

^{pr2}$

最终结果:

line1
line2
myline1
line3
myline2
myline3
morelines

Tags: 代码inimportreforinputcountline
2条回答

您的代码有几个问题。在

  1. 在读取文本文件时,Python的默认设置是在输入时将crlf转换为'\n',因此您的代码永远不会看到'\r'。在
  2. Windows上的换行表示是crlf(回车符+换行符),而不是LF-CR。在
  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 = '')

这对我有用

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是一个函数,它根据变量“i”给出/打印要添加/打印的所需行

->;每次调用get\u my\u line时,“i”都会递增

->;f.readlines读取每个新行并存储在foo中(即,'\n'被它检测到)

->;如果foo是'\n',则表示有一个非文本包含行。在

->;这里的方法是在每个语句后添加新行,如果foo为'\n',则检查prev txt read是否为'\n'(这有助于我们跳过包含行的文本后的第一个'\n',对于后续的连续'\n',我们可以添加新行)

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

->;在if块末尾设置“was”prev“text”或“new”line“真”

->;如果foo不是('\n'),那么只需打印foo,获得要添加的新行并增加i

相关问题 更多 >