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 循环内而不是在循环外缩进。我猜这只是您问题中的格式问题。
我正在使用以下代码:
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 循环内而不是在循环外缩进。我猜这只是您问题中的格式问题。