Python正则表达式使用换行符排序并打印到新文档中

时间:2015-07-27 15:51:33

标签: python regex export

我使用以下代码:

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

但是,当我将它写入记事本文档时,它仍然是采样行的形式。当我打印(项目)时,在命令提示符中,它显示为在不同的行上(这是我想要的记事本.txt)。

1 个答案:

答案 0 :(得分:1)

您可以在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循环中缩进,而不是在for循环中。我猜这只是你问题中的格式化问题。