Python 正则表达式排序并打印到带有换行符的新文档中

Python Regex Sort and Print into a New Document with line breaks

我正在使用以下代码:

from__future__import print_function
import re
NDoc = raw_input("Enter name of new document ")+".txt"
log = open(NDoc, 'a')
file = raw_input("Enter a file to be sorted ")
xfile = open(file+".txt")

for line in xfile:
    l=line.strip()
    n=re.sub("(\B)(?=((MTH|ENG|SCN|HST)[|]))","\n",line)

if len(n) > 0:
    nl=split.("\n")
    for item in nl:
        log.write(item)

使用这段代码,我试图让用户为新文档创建一个名称,然后让代码创建一个具有该名称的文档,并将排序后的信息打印到其中。目前,我可以创建一个新文档并写入其中,但是,数据只是一个连续的字符串,而不是我想要的换行符 (\n)。当我打印到命令提示符时,它出现在单独的行中,但是,当我打印到 .txt 文件时,它不是。

编辑:

示例行如下所示:

MTH|lkdhskghgsh|aljfHST|alkjdfakljdfSCN|klahdfkj@$fadfklj|afENG|alkfd

我希望它在新文档中看起来像这样:

MTH|lkdhskghgsh|aljf

HST|alkjdfakljdf

SCN|klahdfkj@$fadfklj|af

ENG|alkfd

但是,当我将它写入记事本文档时,它仍然是示例行的形式。当我 print(item),在命令提示符中,它显示在不同的行上(这就是我想要的记事本 .txt)。

您可以在 log.write(item) 后附加一个换行符。

for line in xfile:
    l=line.strip()
    n=re.sub("(\B)(?=((MTH|ENG|SCN|HST)[|]))","\n",line)

    if len(n) > 0:
        nl=split.("\n")
        for item in nl:
            log.write(item+'\n')

我测试了你的正则表达式,它把 '\n' 放在正确的位置,所以你仍然可以保留你的循环和你的 if 语句,只添加一个换行符。

Input: MTH|lkdhskghgsh|aljfHST|alkjdfakljdfSCN|klahdfkj@$fadfklj|afENG|alkfd

Output (in a test.txt file I made):

MTH|lkdhskghgsh|aljf
HST|alkjdfakljdf
SCN|klahdfkj@$fadfklj|af
ENG|alkfd

确保您的 if 语句在 for 循环内而不是在循环外缩进。我猜这只是您问题中的格式问题。