匹配从一个文件到另一个文件的字符串并打印匹配行

时间:2017-03-14 16:16:15

标签: python

我有一个目录/backup/servers,我的文件如下:

URF
VPF
XHF

我还有另一个文件/SUPPORT/data.txt,其内容如下:

URF:Active:26-JAN-13
VPF:Active:26-JAN-13
XHF:Active:26-JAN-13
GSA:Active:26-JAN-13
HDKK:Active:26-JAN-13

我列出/backup/servers目录并写入wmc.txt文件,并希望将此文件的内容与/SUPPORT/data.txt文件匹配,并打印/SUPPORT/data.txt文件的匹配行。

为此,我已经编写了下面的脚本,但这并没有给我任何输出。能否帮助我完成这项任务。

#!/usr/local/bin/python2.7
import os
import re

DATA="/SUPPORT/data.txt"
path="/backup/servers"

fd = os.listdir(path)
p = r'wmc.txt'
p1 = r'wmc1.txt'
fh = open(p, 'w+')

for i in fd[-15:]:
    if re.search("(.*)-MC(.*)",i):
        rslt=i.replace("-MC","")
        fh.write(rslt)
        fh.write("\n")
        fl=open(DATA,'r')

        for line1 in fl:
            for line2 in fh:
                if re.match("(.*)line2(.*)",line1):
                    print line1
fh.close()
fl.close()

当前代码:

path="/backup/servers"
DATA="SUPPORT/data.txt"
fd=os.listdir(path)
for i in fd[-15:]:
        if re.match("(.*)-MC(.*)",i):
                rslt=i.replace("-MC","")
                fh=open("wmc.txt",'w+')
                fh.write(rslt)
                fl=open(DATA,'r')
                for line1 in fl:
                        fh.seek(0,0)
                        for line2 in fh:
                                if re.search(".*%s.*"%(line2),line1):
                                #if re.search(line2,line1):
                                        print line1
                                        break

1 个答案:

答案 0 :(得分:0)

基本上,在编写时,文件指针会一直移动到写入的最后一个字符。

比方说,我有一个文件test.py

>>> f = open("test.py","w+") #this creates file
>>> f.write("hello") #write contents to file
>>> f.tell() #check for file pointer - since 5 character are written,
5 
>>> [i for i in f] #on reading lines from file starts reading from where the file pointer is, therefore prints null.
[]

这是您面临的问题。由于您从同一个文件中编写并同时读取,因此您倾向于访问位于EOF的文件指针,因此最终会循环遍历空列表!

因此,使用f.seek应该将文件指针移动到所需的位置(reference)!

比如说,

>>> import os
>>> f.seek(0,os.SEEK_END)
>>> f.tell()
5
>>> [i for i in f]
[]
>>> f.seek(0,os.SEEK_SET)
>>> f.tell()
0
>>> [i for i in f]
['hello']

所以对于你的问题,

修改 它不仅与文件指针,而且,你的正则表达式。你目前正在检查line1中文本'line2'的正则表达式!因此他们不会有任何匹配!

您已将第2行与正则表达式中的(。*)连接起来。这就像".*"+line2+".*"。或使用字符串格式为".*%s.*"%(line2)

import os
for i in fd[-15:]:
    if re.search("(.*)-MC(.*)",i):
        rslt=i.replace("-MC","")
        fh.seek(0,os.SEEK_END) # append contents to file
        fh.write(rslt)
        fh.write("\n")
        fl=open(DATA,'r')

        for line1 in fl:
            fh.seek(0,os.SEEK_SET) # move file pointer to beginning of file
            for line2 in fh:
                #if re.match("(.*)line2(.*)",line1): should be
                if re.match(".*%s.*"%(line2),line1):
                    print line1

希望有所帮助!