RegEx Python查找并打印到新文档

时间:2015-07-23 04:15:55

标签: python regex export

对不起,如果这是一个愚蠢的问题,但我有一些我希望询问的事情。基本上,我要做的是获取一个正在发送的文件,其中一堆数据聚集在一起,应该在单独的行上,对它进行排序,并在自己的行上打印每个语句。我不知道的是如何为要转储的所有内容创建一个新文档,我也不知道如何在每个文件的新行中打印到该文档。

我决定在使用正则表达式和Python时尝试解决此任务。我希望我的代码能够查找四个特定字符串(MTH |,SCN |,ENG |或HST |)中的任何一个,然后复制它之后的所有内容。直到它再次运行到这四个字符串中的一个。此时我需要它停止,记录它复制的所有内容,然后开始复制新字符串。我需要让它读过新的行并忽略它们,我希望用

来完成
re.DOTALL

基本上,我希望我的代码采用这样的方式:

MTH|stuffstuffstuffSCN|stuffstuffstuffENG|stuffstuffstuffHST|stuffstu
ffstuffSCN|stuffstuffstuffENG|stuffstuffstuffHST|stuffstuffstuffMTH|s
tuffstuffstuffSCN|stuffstuffstuffENG|stuffstuffstuff

然后变成一个美好可读的东西:

MTH|stuffstuffstuff

SCN|stuffstuffstuff 

ENG|stuffstuffstuff

HST|stuffstuffstuff

SCN|stuffstuffstuff

ENG|stuffstuffstuff

HST|stuffstuffstuff

MTH|stuffstuffstuff

SCN|stuffstuffstuff

ENG|stuffstuffstuff

同时还创建一个新文档并将其全部粘贴到该.txt文件中。到目前为止,我的代码看起来像这样:

import re
re.DOTALL
from __future__ import print_function
NDoc = raw_input("Enter name of to-be-made document")
log = open("C:\Users\XYZ\Desktop\Python\NDoc.txt", "w")
#Need help with this^ How do I make new file instead of opening a file?

nl = list()
file = raw_input("Enter a file to be sorted")
xfile = open(file)

for line in xfile:
        l=line.strip()
        n=re.findall('^([MTH|SCN|ENG|HST][|].)$[MTH|SCN|ENG|HST][|]',l)
                           #Edited out some x's here that I left in, sorry
            if len(n) > 0:
                nl.append(n)
for item in nl:
    print(item, file = log)

在起始文件中,stuffstuffstuff可以是数字,字母和各种符号(包括|),但除了它们应该是的地方之外没有其他地方MTH | SCN | ENG | HST |发生了,所以我想专门看那些4个字符串作为我的开始和结束。

除了能够在列表中的每个项目的单独行上创建新文档并粘贴到其中之外,上述代码是否会完成我想要做的事情?我可以扫描.txt文件和Excel文件吗?我没有一个文件来测试它直到星期五,但我应该在那时大部分时间完成它。

哦,也可以这样做:

import.re
re.DOTALL
from __future__ import print_function

我必须在外部设置任何东西吗?这些插件或东西我需要导入还是这些都只是内置到python中?

1 个答案:

答案 0 :(得分:1)

此正则表达式将使用您的字符串并在您想要分隔的每个字符串之间添加换行符:

re.sub("(\B)(?=((MTH|SCN|ENG|HST)[|]))","\n\n",line)

以下是我测试的代码:

from __future__ import print_function
import re
#NDoc = raw_input("Enter name of to-be-made document")
#log = open("C:\Users\XYZ\Desktop\Python\NDoc.txt", "w")
#Need help with this^ How do I make new file instead of opening a file?

#nl = list()
#file = raw_input("Enter a file to be sorted")
xfile = open("file2")

for line in xfile:
    l=line.strip()
    n=re.sub("(\B)(?=((MTH|SCN|ENG|HST)[|]))","\n\n",line)
                       #Edited out some x's here that I left in, sorry
    if len(n) > 0:
      nl=n.split("\n")
      for item in nl:
         print(item)

我已经使用没有换行符的输入数据测试了这个版本。我也有一个适用于换行的版本。如果这不起作用,请告诉我,我会发布该版本。

我做的主要环境变化是我正在读取与python脚本在同一目录中名为“file2”的文件,我只是将输出写入屏幕。

此版本假设您的数据中有换行符,只需读取整个文件:

from __future__ import print_function
import re
#NDoc = raw_input("Enter name of to-be-made document")   
#log = open("C:\Users\XYZ\Desktop\Python\NDoc.txt", "w")
#Need help with this^ How do I make new file instead of opening a file?

#nl = list()
#file = raw_input("Enter a file to be sorted")
xfile = open("file")

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