簡體   English   中英

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

[英]Insert a new line string on every blank line in 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

您的代碼有幾個問題。

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

這對我有用

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'給出/打印要添加/打印的所需行的函數。

->每次我們調用get_my_line時,“ i”都會增加

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM